Flex 对Java端返回Collection的处理方法

 

将Flex与Spring集成后(BlazeDS 与Spring集成指南 ),第一个面临的问题就是:对于Java端返回的各种Java类型的对象,Flex中能否有相应的数据类型来映射。

处理,尤其是List、Set、Map及POJO对象值。

    在 BlazeDS 与Spring集成指南 例子的基础上,调整相关的测试代码如下:

 1 1、Java端
 2 1.1、com.yeeach.HelloWorldService  
 3 package com.yeeach; 
 4 
 5 import java.util.ArrayList; 
 6 import java.util.HashMap; 
 7 import java.util.HashSet; 
 8 import java.util.List; 
 9 import java.util.Map; 
10 import java.util.Set; 
11 
12 public class HelloWorldService { 
13     public String hello(String var1) { 
14         return "hello " + var1; 
15     } 
16     public String world(String var1) { 
17         return "world " + var1; 
18     } 
19     public Map<String,List<String>> getMap() { 
20         ArrayList<String> list1=new ArrayList<String>(); 
21         list1.add("value11"); 
22         list1.add("value12"); 
23         list1.add("value13"); 
24         ArrayList<String> list2=new ArrayList<String>(); 
25         list2.add("value21"); 
26         list2.add("value22"); 
27         list2.add("value23"); 
28         ArrayList<String> list3=new ArrayList<String>(); 
29         list3.add("value31"); 
30         list3.add("value32"); 
31         list3.add("value33");        
32         HashMap<String,List<String>> map=new HashMap<String,List<String>>(); 
33         map.put("key1", list1); 
34         map.put("key2", list2); 
35         map.put("key3", list3);        
36         return map; 
37     } 
38     public ArrayList<Person> getList() { 
39         ArrayList <Person> list=new ArrayList<Person>(); 
40         Person p1=new Person(); 
41         p1.setName("name1"); 
42         p1.setPass("pass1"); 
43         Person p2=new Person(); 
44         p2.setName("name2"); 
45         p2.setPass("pass2"); 
46         Person p3=new Person(); 
47         p3.setName("name3"); 
48         p3.setPass("pass3"); 
49         list.add(p1); 
50         list.add(p2); 
51         list.add(p3); 
52         return list; 
53     } 
54     public Set<Person> getSet() { 
55         HashSet<Person>  set=new HashSet<Person>(); 
56         Person p1=new Person(); 
57         p1.setName("name1"); 
58         p1.setPass("pass1"); 
59         Person p2=new Person(); 
60         p2.setName("name2"); 
61         p2.setPass("pass2"); 
62         Person p3=new Person(); 
63         p3.setName("name3"); 
64         p3.setPass("pass3"); 
65         set.add(p1); 
66         set.add(p2); 
67         set.add(p3); 
68         return set; 
69     }    
70 } 
71 
72 1.2、com.yeeach.Person
73 package com.yeeach; 
74 
75 public class Person { 
76 
77         public String getName() { 
78             return name; 
79         } 
80         public void setName(String name) { 
81             this.name = name; 
82         } 
83         public String getPass() { 
84             return pass; 
85         } 
86         public void setPass(String pass) { 
87             this.pass = pass; 
88         } 
89         private String name; 
90         private String pass; 
91 
92 }

2、Flex 端

2.1、helloworld.mxml
<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
                layout="vertical"> 
    <mx:RemoteObject destination="test1" 
                     id="test1"> 
        <mx:method name="hello" 
                   result="sayHelloResult(event)"/> 
        <mx:method name="world" 
                   result="sayWorldResult(event)"/> 
        <mx:method name="getMap" 
                   result="getMapResult(event)"/> 
        <mx:method name="getList" 
                   result="getListResult(event)"/> 
        <mx:method name="getSet" 
                   result="getSetResult(event)"/> 
    </mx:RemoteObject> 
    <mx:HBox> 
        <mx:Label text="输入:"/> 
        <mx:TextInput id="inputStr"/> 
        <mx:Button label="say hello" 
                   click="sayHello(event);"/> 
        <mx:Button label="say world" 
                   click="sayWorld(event);"/> 
        <mx:Button label="get map" 
                   click="test1.getMap()"/> 
        <mx:Button label="get list" 
                   click="test1.getList()"/> 
        <mx:Button label="get set" 
                   click="test1.getSet()"/>                   
    </mx:HBox> 
    <mx:HBox> 
        <mx:Label text="结果:"/> 
        <mx:TextArea id="result"/> 
    </mx:HBox> 

    <mx:Script> 

        <![CDATA[ 
            import mx.collections.ArrayCollection; 
            import mx.rpc.events.FaultEvent; 
            import mx.controls.Alert; 
            import mx.rpc.events.ResultEvent; 
            import com.yeeach.Person; 
            [Bindable] 
            public var person:Person; 
            [Bindable] 

            public var map:ArrayCollection=null; 

            function sayHello(event:Event):void 
            { 
                var inputVar:String=inputStr.text; 
                test1.hello(inputVar); 

            } 

            function sayWorld(event:Event):void 
            { 
                var inputVar:String=inputStr.text; 
                test1.world(inputVar); 

            } 

            private function sayHelloResult(event:ResultEvent):void 
            { 
                result.text=event.result.toString(); 
                Alert.show(event.result.toString(), "返回结果"); 
            } 

            private function sayWorldResult(event:ResultEvent):void 
            { 
                result.text=event.result.toString(); 
                Alert.show(event.result.toString(), "返回结果"); 
            } 

            private function getMapResult(event:ResultEvent):void 
            { 
                for (var key:String in event.result) 
                { 
                    var list:ArrayCollection=event.result[key] as ArrayCollection; 
                    for (var key1:Object in list) 
                    { 
                        Alert.show("map item key is: " + key + " value is: " + key1); 
                    } 

                } 
            } 

            private function getList():void 
            { 
                test1.getList(); 
            } 

            private function getListResult(event:ResultEvent):void 
            { 
                var ac:ArrayCollection=event.result as ArrayCollection; 
                for (var i:int=0; i < ac.length; i++) 
                { 
                    var p1:Person=ac.getItemAt(i) as Person; 
                    Alert.show("list item name is: " + p1.name+" 
 another usage : "+ac.getItemAt(i).name); 
                } 

            } 
            private function getSet():void 
            { 
                test1.getSet(); 
            } 

            private function getSetResult(event:ResultEvent):void 
            { 
                var ac:ArrayCollection=event.result as ArrayCollection; 
                for (var i:int=0; i < ac.length; i++) 
                { 
                    var p1:Person=ac.getItemAt(i) as Person; 
                    Alert.show("set item name  is: " + p1.name); 
                } 

            }            
        ]]> 
    </mx:Script> 
</mx:Application>


2.2、com.yeeach.Person.as
package com.yeeach 
{ 
    [Bindable] 
    [RemoteClass(alias="com.yeeach.Person")] 
    public class Person 
    { 
        public var name:String; 
        public var pass:String; 
    } 
}

  

 1、JavaBean从Java端返回给Flex,可以通过Flex的Meta Tag [RemoteClass (alias=” “)]来标识服务器端对应的Java的类(一般为POJO对象)。

注意位置,是在class声明前。

    2、Java Collection返回给Flex,都可以通过转化为mx.collections.ArrayCollection来进行处理。

    3、Flex对于服务器端返回的java其他类型的处理,相对简单,可以参考

http://livedocs.adobe.com/flex/3/html/help.html?content=data_access_4.html

原文地址:https://www.cnblogs.com/regalys168/p/3599168.html