arcgis api for flex之五、flex对java自定义对象转换详解
一、建立Flex与Java交互的工程。 package com.rocd.flex.entity; import java.io.Serializable; public class UserBean implements Serializable { private String userName; private String password; private int age; private String email; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
package com.rocd.flex.biz; import java.util.ArrayList; import java.util.List; import com.rocd.flex.entity.UserBean; public class UserManager { public List<UserBean> getUserList() { List<UserBean> list = new ArrayList<UserBean>(); for (int i = 0; i < 10; i++) { UserBean user = new UserBean(); user.setUserName("用户" + i); user.setPassword("123"); user.setAge(20 + i); user.setEmail("user" + i + "@aaa.com"); list.add(user); } return list; } }
这里就不连接数据库去操作了,因为本文重点放在Flex调用Java上,所以写个桩数据用以测试。 代码 <?xml version="1.0" encoding="UTF-8"?> <service id="remoting-service" class="flex.messaging.services.RemotingService"> <adapters> <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/> </adapters> <default-channels> <channel ref="my-amf"/> </default-channels> <destination id="UserManager"> <properties> <source>com.rocd.flex.biz.UserManager</source> </properties> </destination> </service> 其中destination就是信道,properties是可以配置多个Java类,source是配置要调用Java类的包路径。到此,Java部分的代码就写完了。下面是Flex中的代码。 注意Project Location的Folder要选择MyEclipse建立的Web工程的WebRoot下。Server technology选择J2EE 注意Server location中Root folder要选择Java Web工程的WebRoot路径。Root URL是Java web工程的访问路径,由于使用的是Tomcat服务器,工程名为FlexTest,所以路径是http://localhost:8080/FlexTest/,而Context root则是Java Web项目的工程名。完成后点击那个[Validate Configuration]进行验证,如果窗口上方显示如上图所示的“黄三角”就说明可以进行下一步操作了。 代码 package com.rocd.flex.entity { [Bindable] [RemoteClass(alias="com.rocd.flex.entity.UserBean")] public class UserBean { public var userName:String; public var password:String; public var age:int; public var email:String; } } 这里[Bindable]是可绑定的,[RemoteClass(alias="com.rocd.flex.entity.UserBean")]是和Java代码中的UserBean类关联起来。这样就可以利用类型转换来将Java对象转换为AS对象了。 <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="12" initialize="init()"> <mx:Script> <![CDATA[ import com.rocd.flex.entity.UserBean; import mx.collections.ArrayCollection; import mx.rpc.events.ResultEvent; private function init():void { UserManager.getUserList(); UserManager.addEventListener(ResultEvent.RESULT,getUserList); } private function getUserList(event:ResultEvent):void { var userList:ArrayCollection = ArrayCollection(event.result); var userList_FlexData:ArrayCollection = new ArrayCollection(); for (var i:int = 0; i < userList.length; i++) { var user:UserBean = UserBean(userList.getItemAt(i)); userList_FlexData.addItem(user); } dataGrid.dataProvider = userList_FlexData; } ]]> </mx:Script> <mx:RemoteObject id="UserManager" destination="UserManager" showBusyCursor="true" /> <mx:Panel x="32" y="20" width="399" height="285" layout="absolute" title="用户列表"> <mx:DataGrid x="0" y="0" width="379" height="243" id="dataGrid"> <mx:columns> <mx:DataGridColumn headerText="用户名" dataField="userName"/> <mx:DataGridColumn headerText="年龄" dataField="age"/> <mx:DataGridColumn headerText="Email" dataField="email"/> </mx:columns> </mx:DataGrid> </mx:Panel> </mx:Application>
参考地址:http://www.cnblogs.com/RocD-DuPeng/articles/1751040.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |