这个例子是,输入一个用户信息,并保存到服务端。
第一个目的是实验一下传送对象;
再一个目的是感觉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>