flex:RemoteObject 和 DataGrid 数据交互, AS 与java 数据类型转换

flex:RemoteObject 和 DataGrid 数据交互, AS 与java 数据类型转换
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

<mx:RemoteObject   id="RO" source="org.sjtu.se.Applex" fault="alert(fault.faultString, 'Error');">     <mx:method name="listPerson"/> </mx:RemoteObject>

<mx:Model id="myModel">     {RO.listPerson.result} </mx:Model>

<mx:DataGrid id="DG" with="100%" height="100%" dataProvider="{myModel}">     <mx:columns>         <mx:array>             <mx:DataGridColumn headerText="Name" columnName="name"/>             <mx:DataGridColumn headerText="Age"  columnName="age"/>         </mx:array     </mx:columns> </mx:DataGrid> public class Person {     String name;     int age;     //getters and setters here.     //getters and setters are must for Flex to access the data in object of     //this class } public List listPerson() {     List list = new ArrayList();     Person p1 = new Person("seafront", 22);     Person p2 = new Person("frontsea", 20);     list.add(p1); list.add(p2);     return list; }

flex java 交互主要还是要关心这两者之间的数据交互类型的转换。ActionScript java 的类型互换不是对称的,见下面的表:

ActionScript to Java

 ActionScript Type

 Java Type

 null

 null

 Number

 java.lang.Number

 Boolean

 java.lang.Number, booean,  java.lang.String

 String

 java.lang.String, java.lang.Boolean  boolean, java.lang.Character, char,  java.lang.Number

 Date  XML Object

 java.util.Date  org.w 3c.dom.Document

                     

Java to ActionScript

 Java Type

 ActionScript Type

 null

 null

 java.lang.Number(class or primitive)

 Number

 java.lang.Boolean, boolean

 Boolean

 java.lang.String, java.lang.Character  char[]

 String

 java.util.Collection, java.lang.reflect.Array

 Array

 java.util.Map, java.util.Dictionary

 Object

 org.w 3c.dom.Document

 XML Object

 Other classes

 Object(typed)

由上面两表可以看到,一般的数据类型都可以很好的装换,但是对于用户自定义的类型的话,那么要不就是在ActionScritp中定义相关的数据类型,进行类型注册,但是这样两者就太紧耦合了,觉得不是很好。另外的话可以看到,java 可以返回Collection 类型的集合类给ActionScript ,而AS 使用是一数组来处理,就像前面例子里的一样,虽然Person是自定义类,但是里面的成员都是基本AS 可自动转换的类型的,而把Person 对象放在List里返回,然后AS 通过数组[] 操作符来访问,直接操作name age 成员变量。

所以如果用flex 作表现曾的话,那么对于model 中的类,就可能要考虑这一点,有时候需要专门为flex 编写与其兼容的model 类。可见两种方法都需要额外的工作,根据不同情况来选择就好。

还有如果从 Flex 中提交一个 Array Java 方法中, java 方法以 Collection 来接受,如果 Array 不是常规数组,就是说数组元素不是用 index 来访问,那么里面每个元素是一个 Map(HashMap), key 是这个数组访问变量,比要把上面 datagrid dataProvider 提交大 java 方法中,那么 Map key 就是 name age ,使用 Map.get() 从而取出里面的数据。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值