`
wangcheng
  • 浏览: 1467100 次
  • 性别: Icon_minigender_1
  • 来自: 青岛人在北京
社区版块
存档分类
最新评论

Flex + Hessian 学习笔记(二)

阅读更多

这个例子是,输入一个用户信息,并保存到服务端。
第一个目的是实验一下传送对象;
再一个目的是感觉Hessian例子里的用法不太舒服,又要实现mx.rpc.IResponder,又要处理AsyncToken,还要send,所以把这些封装了一下,由BaseService实现mx.rpc.IResponder,由UserService类开放服务接口(既提供java端UserService的方法),这样其它类就可以像使用普通对象一样使用UserService类。

java 代码
  1. public class UserBean implements Serializable {   
  2.   
  3.     private Integer userId;   
  4.        
  5.     private String userName;   
  6.        
  7.     private String password;   
  8.        
  9.     private String companyName;   
  10.        
  11.     getter setter ...   
  12. }  
java 代码
  1. public interface UserService {   
  2.   
  3.     public String getUserName(Integer userId);   
  4.        
  5.     public List<UserBean> saveUser(UserBean userBean);   
  6. }  
java 代码
  1. public class UserServiceImpl extends HessianServlet implements UserService {   
  2.   
  3.     private static List<UserBean> userDataSource = new ArrayList<UserBean>();   
  4.        
  5.     public String getUserName(Integer userId) {   
  6.         return "MyName" + userId;   
  7.     }   
  8.   
  9.     public List<UserBean> saveUser(UserBean userBean) {   
  10.         userBean.setUserId(userDataSource.size() + 1);   
  11.         userDataSource.add(userBean);   
  12.         return userDataSource;   
  13.     }   
  14. }  
xml 代码
  1. <servlet>  
  2.     <servlet-name>userService</servlet-name>  
  3.     <servlet-class>myhessian.service.UserServiceImpl</servlet-class>  
  4. </servlet>  
  5.   
  6. <servlet-mapping>  
  7.     <servlet-name>userService</servlet-name>  
  8.     <url-pattern>/userService</url-pattern>  
  9. </servlet-mapping>  

以上是服务端的java代码,下面是flex的代码

as3 代码
  1. public class UserBean {   
  2.        
  3.     public var userId : int;   
  4.        
  5.     public var userName : String;   
  6.        
  7.     public var password : String;   
  8.        
  9.     public var companyName : String;   
  10. }  
as3 代码
  1. public class BaseService implements IResponder {   
  2.        
  3.     protected var resultCallbackFunction : Function;   
  4.        
  5.     protected var faultCallbackFunction : Function;   
  6.        
  7.     public function BaseService(resultCallback:Function=null, faultCallback:Function=null) {   
  8.         if (resultCallback == null) {   
  9.             resultCallbackFunction = defaultFunction;   
  10.         } else {   
  11.             resultCallbackFunction = resultCallback;   
  12.         }   
  13.         if (faultCallback == null) {   
  14.             faultCallbackFunction = defaultFunction;   
  15.         } else {   
  16.             faultCallbackFunction = faultCallback;   
  17.         }   
  18.     }   
  19.        
  20.     public function result(data:Object):void {   
  21.         var event:ResultEvent = data as ResultEvent;   
  22.         resultCallbackFunction(event.result);   
  23.     }   
  24.        
  25.     public function fault(data:Object):void {   
  26.         var event:ResultEvent = data as ResultEvent;   
  27.         faultCallbackFunction(event.result);   
  28.     }   
  29.        
  30.     public function defaultFunction(data:Object):void {   
  31.     }   
  32. }  
as3 代码
  1. public class UserService extends BaseService {   
  2.        
  3.     private static var _userService : HessianService;   
  4.        
  5.     protected static function getUserService():HessianService {   
  6.         if (!_userService) {   
  7.             _userService = new HessianService("userService");   
  8.         }   
  9.         return _userService;   
  10.     }   
  11.        
  12.     public function UserService(resultCallback:Function=null, faultCallback:Function=null) {   
  13.         super(resultCallback, faultCallback);   
  14.     }   
  15.        
  16.     public function getUserName(userId:int):void {   
  17.         var token:AsyncToken = getUserService().getUserName.send(userId);   
  18.         token.addResponder(this);   
  19.     }   
  20.        
  21.     public function saveUser(user : UserBean):void {   
  22.         var token:AsyncToken = getUserService().saveUser.send(user);   
  23.         token.addResponder(this);   
  24.     }   
  25. }  
xml 代码
  1. <mx:Application    
  2.     xmlns:mx="http://www.adobe.com/2006/mxml"    
  3.     layout="absolute" >  
  4.   
  5.     <mx:Script>  
  6.         [CDATA[  
  7.             import hessian.service.UserService;  
  8.             import hessian.bean.UserBean;  
  9.               
  10.             public function refreshUserDataGrid(data:Object):void {  
  11.                 //只能as Array,不能as ArrayCollection  
  12.                 userDataGrid.dataProvider = data as Array;  
  13.             }  
  14.               
  15.             public function onClick():void {  
  16.                 var user : UserBean = new UserBean();  
  17.                 user.userName = nameInput.text;  
  18.                 user.password = passwordInput.text;  
  19.                 user.companyName = companyInput.text;  
  20.                   
  21.                 var userService : UserService = new UserService(refreshUserDataGrid);  
  22.                 userService.saveUser(user);  
  23.             }  
  24.         ]]  
  25.     </mx:Script>  
  26.   
  27.     <mx:Label x="10" y="10" text="Name" width="59"/>  
  28.     <mx:TextInput x="77" y="8" id="nameInput"/>  
  29.     <mx:Label x="10" y="36" text="Password"/>  
  30.     <mx:Label x="10" y="62" text="Company"/>  
  31.     <mx:TextInput x="77" y="34" id="passwordInput"/>  
  32.     <mx:TextInput x="77" y="60" id="companyInput"/>  
  33.     <mx:Button x="77" y="90" label="Button" click="onClick()"/>  
  34.     <mx:DataGrid x="10" y="120" width="271" id="userDataGrid">  
  35.         <mx:columns>  
  36.             <mx:DataGridColumn headerText="ID" dataField="userId"/>  
  37.             <mx:DataGridColumn headerText="Name" dataField="userName"/>  
  38.             <mx:DataGridColumn headerText="Company" dataField="companyName"/>  
  39.         </mx:columns>  
  40.     </mx:DataGrid>  
  41.        
  42. </mx:Application>  
分享到:
评论
3 楼 mathgl 2008-05-09  
有谁知道怎么 处理 IOErrorEvent吗?

好像总是不能dispatch
2 楼 wangcheng 2008-02-26  
特别复杂的对象没测过。这些已经满足我的项目需要了。
1 楼 多多 2008-02-25  
嗯,的确不错,楼主有测试过复杂java对象的传递么?

相关推荐

    Flex + Hessian 留言本

    Flex + Hessian 学习笔记(二) http://wangcheng.javaeye.com/blog/141539 Flex + Hessian 学习笔记(三) http://wangcheng.javaeye.com/blog/151644 ####(重要说明) 使用过程中,根据需要请修改 Flex 里的 ...

    SpringMVC + Mybatis + Hessian + Maven

    Spring + Mybatis + Hessian 亲自手写,附带测试用例,有问题随时提问。操作流程,自己导入sql,并修改数据库配置,配置Tomcat后启动服务,然后启动Tomcat, 最后测试用例。 测试用例步骤:步骤1.Run HessianTest. ...

    Spring + Hessian + Spring MVC(包括Server和Client).zip

    1.名称:Spring + Hessian + Spring MVC(包括Server和Client).zip 2.来源:自己实现 3.备注:项目有两个系统,包括Server端和Client端,项目已经跑通,可以实现。 4.注意:client中pom.xml里最后的一个jar包,需要...

    SpringMVC+ibatis+hessian基础框架

    压缩包里有两个 springMVC+Ibatis 的项目:HessianServer(服务器端),HessianClient(客户端),解压导入到MyEclipse 更改配置文件中的数据源,建表(和实体类对应的表),执行客户端中的BasicClient.java文件即可...

    spingMVC+mybatis+hessian+activeMQ+redis

    完美整合spingMVC+mybatis+hessian+activeMQ+redis,引入mybatis物理分页插件,模拟cookie登陆的工具类。

    CXF+RMI+HESSIAN

    Hessian通过序列化Java对象为紧凑的二进制格式,减少了网络传输的数据量,提高了通信速度。Hessian与RMI类似,但它的二进制格式使其在网络环境中的性能更优。 “CXF+RMI+HESSIAN”的结合意味着我们可以利用CXF创建...

    struts2+ibatis+spring+Hessian 整合项目

    struts2+ibatis+spring+Hessian 整合项目 web项目整合,服务端用hessian协议远程调用服务端的方法,hessian是用spring代理整合,struts2+ibatis+spring的整合项目,用作学习和开发基础平台构建很有用处,工程导入...

    spring+hessian+maven整合.zip

    spring+hessian+maven整合.zip

    基于spring+hessian框架的webservice实例

    Hessian是一种二进制Web服务协议,由Caucho公司开发。它提供了一种高效的RPC(Remote Procedure Call)机制,允许Java对象在HTTP上进行远程调用,其优点在于传输速度快、序列化效率高。Hessian支持多种语言,包括...

    OSGI+SpringDM+Hessian

    Hessian是一种二进制web服务协议,由Caucho公司开发。它提供了简单、快速的方式进行远程方法调用(RPC)。Hessian协议使用HTTP作为传输层,但编码方式比普通的SOAP或者REST更加紧凑和高效,因此在性能上有所提升。...

    Springmvc+Hibernate+Hessian架包整合

    然后,Hessian是一种二进制RPC(远程过程调用)协议,由Caucho公司开发。它的主要优点在于减少了网络传输的数据量,从而提高了服务间的通信速度。Hessian提供了透明的序列化和反序列化机制,使得Java对象可以直接跨...

    DuBBo(rmi+Hessian).zip

    本压缩包“DuBBo(rmi+Hessian).zip”提供了关于Dubbo如何与RMI(Remote Method Invocation)和Hessian两种通信协议结合使用的深入学习资料。下面我们将详细探讨这两个知识点。 首先,RPC(Remote Procedure Call)...

    外部接口调用 使用spring4+hessian4实例(二)

    标题中的“外部接口调用 使用spring4+hessian4实例(二)”指的是使用Spring框架的版本4和Hessian库的版本4来实现远程服务调用的一种实践案例。在这个实例中,我们将探讨如何利用这两个组件来构建分布式系统中的服务...

Global site tag (gtag.js) - Google Analytics