【永恒的瞬间】
☜Give me hapy ☞

<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.w3c.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.w3c.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() 从而取出里面的数据。

 

posted on 2007-03-02 12:38 ☜♥☞MengChuChen 阅读(5178) 评论(1)  编辑  收藏 所属分类: flex2.0

FeedBack:
# re: flex:RemoteObject 和 DataGrid 数据交互, AS 与java 数据类型转换 [未登录]
2009-06-25 18:48 | Luke
columnName 这是个什么东西?我里面怎么死报错。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: