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>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值