客户端调用服务器端代码的方式(非entity、facade方式)
来源:互联网 发布:网络高清摄像头一体机 编辑:程序博客网 时间:2024/05/07 02:19
其实EAS中开发中,在client端调用server端代码是再平常不过的事,比如我们要更新数据,或者进行数据库查询等~~方法大家也都知道,利用entity或是facade发布生成的 XXXXFactory 或是 XXXXFacade 去调用。。
但是,不知道大家有没有发现,无论哪种方式,都是在一个前提下才能调用:User已经login了,就是用户已经登陆了。那么没有登录之前,我怎么调用服务器等方法呢?这就是我今天要说的内容!
应用项目:鑫苑项目。
应用场景:客户用一个安全系统,可以动态的控制某些用户能登录, 有些用户不能登录。并且不能利用修改EAS数据库的方式!
解决方案:在打开eas的client端时,把所有能登陆的用户名(加密后)取到客户端,当用户填写用户名后,在focusout事件里去校验此用户是否可以登录。
关键问题:在客户端程序启动时,怎样取到可以登录的用户的List。因为此时在用户登录之前,不能通过entity或是facade发布生成的类去调用,否则会报未登录的错误。
下面就是怎样通过其他手段来调用服务器端的代码的方法:
首先,要建一个接口 IUserListGetter,这个接口要继承 com.kingdee.bos.orm.IORMModel 接口,比如:
public interface IUserListGetter extends IORMModel {
public List getUserList();
}
IUserListGetter 这个接口很简单,就一个方法,就是取得UserList。
然后定义这个 IUserListGetter 接口的实现类:UserListGetter,这个类同时要继承 com.kingdee.bos.orm.template.ORMObject。代码如下:
public class UserListGetter extends ORMObject implements IUserListGetter {
// 定义一个名称。
public String name;
public UserGetter(String name) {
super(null);
this.name = name;
super.registerInterface(IUserListGetter.class, this);
}
public UserGetter() {
super.registerInterface(IUserListGetter.class, this);
}
public String getName() throws ORMCoreException {
return name;
}
public List getUserList() {
// 以下为服务器端取得UserList的代码
............
}
}
注:上面的 UserListGetter类中的 name 看逻辑应该不是必须的。最重要的应该是 super.registerInterface(IUserListGetter.class, this); 注册接口这一句。不过我没试过删掉 name 所有的相关代码。
这样,我们要实现的接口和类就做完了,还有一个关键点:这两个类和接口放在哪?(IUserListGetter 和 UserListGetter)。同entity或是facade发布的XXXXFactory或是XXXXFacade一样,我们两个类也放在同app和client同级的包下,如:
com.kingdee.fdc.tools
|--app
|--client
|--IUserListGetter
|--UserListGetter
我想大家一定知道为什么要这么放了,因为这样放,就是保证我们客户端也好,服务器端也好,都有 IUserListGetter 和 UserListGetter 编译成的class。(注:UserListGetter 也许这样是不必要的,我没试过,但是IUserListGetter 必须是这样的。)
好了,剩下的就是客户端怎样调用了,其实很简单:
// 关于UIConfig.getUrl()应该是取服务器的URL,这里要注意哪个是类名,哪个是接口。他们名字比较像,只差前面的一个I。
IUserListGetter userListGetter = (IUserListGetter) RPCEngineFactory.getEngine(UIConfig.getUrl()).createObject("com.kingdee.fdc.tools.UserListGetter", IUserListGetter.class);
List userList = userListGetter.getUserList();
好了,这样就可以了。就像上面客户端调用的代码中:com.kingdee.fdc.tools.UserListGetter 这个字符串,他如果只是向服务器传去一个字符串,那么 UserListGetter 类就没必要与 IUserListGetter 接口同级,并且保持在客户端有 UserListGetter.class。但是如果不是简单的一个字符串,那么可能就必须保证客户端也有 UserListGetter.class 存在了。
- 客户端调用服务器端代码的方式(非entity、facade方式)
- 客户端调用服务器端代码的方式(非entity、facade方式)
- java代码webservice客户端的两种调用方式
- webservice的axis2客户端调用方式和xfire调用方式
- thrift客户端调用不支持多线程方式,非线程安全
- JavaScript客户端与服务器端的五种通信方式
- java中,客户端与服务器端跳转的几种方式
- HDFS的API调用,创建Maven工程,创建一个非Maven工程,HDFS客户端操作数据代码示例,文件方式操作和流式操作
- webservice客户端调用方式
- webservice客户端调用方式
- entity framework 6.0 复杂条件的两种调用方式
- 客户端调用WebServices的3种方式
- WebService客户端的几种调用方式
- 通过客户端编程的方式调用webservice
- WCF客户端调用的几种方式
- 通过客户端编程的方式调用webservice
- WebService的两种客户端调用方式
- WebService的两种客户端调用方式
- 菜单脚本导出操作步骤
- linux(ubuntu) 系统修改/etc/fstab文件后无法进入系统的解决方法
- Linux pthread 障碍同步barrier
- 反回两个时间相差多少小时
- Linux_rhel安装 oracle 11g r2
- 客户端调用服务器端代码的方式(非entity、facade方式)
- hdu1176免费馅饼(DP)
- calencler 时间比较
- 拦截器与过滤器的区别
- JBOSS:让应用局域网访问的方法总结
- eas sql常用操作和表
- Time类中的运算符重载
- 怎样能取得登录用户所拥有权限的组织?
- 动态规划—杭电1087 Super Jumping! Jumping! Jumping!