Flex 对Java端返回Collection的处理方法
对于Java端返回的各种Java类型的对象,Flex中能否有相应的数据类型来映射。处理,尤其是List、Set、Map及POJO对象值。
1、java端
HelloWorldService.java
import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; public class HelloWorldService { public String hello(String var1) { return "hello " + var1; } public String world(String var1) { return "world " + var1; } public Map<String,List<String>> getMap() { ArrayList<String> list1=new ArrayList<String>(); list1.add("value11"); list1.add("value12"); list1.add("value13"); ArrayList<String> list2=new ArrayList<String>(); list2.add("value21"); list2.add("value22"); list2.add("value23"); ArrayList<String> list3=new ArrayList<String>(); list3.add("value31"); list3.add("value32"); list3.add("value33"); HashMap<String,List<String>> map=new HashMap<String,List<String>>(); map.put("key1", list1); map.put("key2", list2); ap.put("key3", list3); return map; } public ArrayList<Person> getList() { ArrayList <Person> list=new ArrayList<Person>(); Person p1=new Person(); p1.setName("name1"); p1.setPass("pass1"); Person p2=new Person(); p2.setName("name2"); p2.setPass("pass2"); Person p3=new Person(); p3.setName("name3"); p3.setPass("pass3"); list.add(p1); list.add(p2); list.add(p3); return list; } public Set<Person> getSet() { HashSet<Person> set=new HashSet<Person>(); Person p1=new Person(); p1.setName("name1"); p1.setPass("pass1"); Person p2=new Person(); p2.setName("name2"); p2.setPass("pass2"); Person p3=new Person(); p3.setName("name3"); p3.setPass("pass3"); set.add(p1); set.add(p2); set.add(p3); return set; } } |
Person.java
public class Person { private String name; private String pass; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } } |
2、flex端RemoteObject
<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> |
ActionScript
<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(), "返回结果"); } //***************map 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(); } //***************list 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+" \n another usage : "+ac.getItemAt(i).name); } } private function getSet():void { test1.getSet(); } //***************set 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> |
3、总结
a、JavaBean从Java端返回给Flex,可以通过Flex的Meta Tag [RemoteClass (alias=“”)]来标识服务器端对应的Java的类(一般为POJO对象)。
注意位置,是在class声明前。
b、Java Collection返回给Flex,都可以通过转化为mx.collections.ArrayCollection来进行处理。
c、Flex对于服务器端返回的java其他类型的处理,相对简单,可以参考
http://livedocs.adobe.com/flex/3/html/help.html?content=data_access_4.html