这个例子是,输入一个用户信息,并保存到服务端。第一个目的是实验一下传送对象;再一个目的是感觉Hessian例子里的用法不太舒服,又要实现mx.rpc.IResponder,又要处理AsyncToken,还要send,所以把这些封装了一下,由BaseService实现mx.rpc.IResponder,由UserService类开放服务接口(既提供java端UserService的方法),这样其它类就可以像使用普通对象一样使用UserService类。
java 代码 public class UserBean implements Serializable { private Integer userId; private String userName; private String password; private String companyName; getter setter ... } java 代码 public interface UserService { public String getUserName(Integer userId); public List<UserBean> saveUser(UserBean userBean); } java 代码 public class UserServiceImpl extends HessianServlet implements UserService { private static List<UserBean> userDataSource = new ArrayList<UserBean>(); public String getUserName(Integer userId) { return "MyName" + userId; } public List<UserBean> saveUser(UserBean userBean) { userBean.setUserId(userDataSource.size() + 1); userDataSource.add(userBean); return userDataSource; } } xml 代码 <servlet> <servlet-name>userService</servlet-name> <servlet-class>myhessian.service.UserServiceImpl</servlet-class> </servlet> <servlet-mapping> <servlet-name>userService</servlet-name> <url-pattern>/userService</url-pattern> </servlet-mapping>以上是服务端的java代码,下面是flex的代码
as3 代码 public class UserBean { public var userId : int; public var userName : String; public var password : String; public var companyName : String; } as3 代码 public class BaseService implements IResponder { protected var resultCallbackFunction : Function; protected var faultCallbackFunction : Function; public function BaseService(resultCallback:Function=null, faultCallback:Function=null) { if (resultCallback == null) { resultCallbackFunction = defaultFunction; } else { resultCallbackFunction = resultCallback; } if (faultCallback == null) { faultCallbackFunction = defaultFunction; } else { faultCallbackFunction = faultCallback; } } public function result(data:Object):void { var event:ResultEvent = data as ResultEvent; resultCallbackFunction(event.result); } public function fault(data:Object):void { var event:ResultEvent = data as ResultEvent; faultCallbackFunction(event.result); } public function defaultFunction(data:Object):void { } } as3 代码 public class UserService extends BaseService { private static var _userService : HessianService; protected static function getUserService():HessianService { if (!_userService) { _userService = new HessianService("userService"); } return _userService; } public function UserService(resultCallback:Function=null, faultCallback:Function=null) { super(resultCallback, faultCallback); } public function getUserName(userId:int):void { var token:AsyncToken = getUserService().getUserName.send(userId); token.addResponder(this); } public function saveUser(user : UserBean):void { var token:AsyncToken = getUserService().saveUser.send(user); token.addResponder(this); } } xml 代码 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" > <mx:Script> [CDATA[ import hessian.service.UserService; import hessian.bean.UserBean; public function refreshUserDataGrid(data:Object):void { //只能as Array,不能as ArrayCollection userDataGrid.dataProvider = data as Array; } public function onClick():void { var user : UserBean = new UserBean(); user.userName = nameInput.text; user.password = passwordInput.text; user.companyName = companyInput.text; var userService : UserService = new UserService(refreshUserDataGrid); userService.saveUser(user); } ]] </mx:Script> <mx:Label x="10" y="10" text="Name" width="59"/> <mx:TextInput x="77" y="8" id="nameInput"/> <mx:Label x="10" y="36" text="Password"/> <mx:Label x="10" y="62" text="Company"/> <mx:TextInput x="77" y="34" id="passwordInput"/> <mx:TextInput x="77" y="60" id="companyInput"/> <mx:Button x="77" y="90" label="Button" click="onClick()"/> <mx:DataGrid x="10" y="120" width="271" id="userDataGrid"> <mx:columns> <mx:DataGridColumn headerText="ID" dataField="userId"/> <mx:DataGridColumn headerText="Name" dataField="userName"/> <mx:DataGridColumn headerText="Company" dataField="companyName"/> </mx:columns> </mx:DataGrid> </mx:Application> 相关资源:Java 面经手册·小傅哥(公众号:bugstack虫洞栈).pdf