将Flex与Spring集成后(BlazeDS 与Spring集成指南 ),第一个面临的问题就是:对于Java端返回的各种Java类型的对象,Flex中能否有相应的数据类型来映射。
处理,尤其是List、Set、Map及POJO对象值。
在 BlazeDS 与Spring集成指南 例子的基础上,调整相关的测试代码如下:
1 1、Java端2 1.1、com.yeeach.HelloWorldService3 packagecom.yeeach;4
5 importjava.util.ArrayList;6 importjava.util.HashMap;7 importjava.util.HashSet;8 importjava.util.List;9 importjava.util.Map;10 importjava.util.Set;11
12 public classHelloWorldService {13 publicString hello(String var1) {14 return "hello " +var1;15 }16 publicString world(String var1) {17 return "world " +var1;18 }19 public Map>getMap() {20 ArrayList list1=new ArrayList();21 list1.add("value11");22 list1.add("value12");23 list1.add("value13");24 ArrayList list2=new ArrayList();25 list2.add("value21");26 list2.add("value22");27 list2.add("value23");28 ArrayList list3=new ArrayList();29 list3.add("value31");30 list3.add("value32");31 list3.add("value33");32 HashMap> map=new HashMap>();33 map.put("key1", list1);34 map.put("key2", list2);35 map.put("key3", list3);36 returnmap;37 }38 public ArrayListgetList() {39 ArrayList list=new ArrayList();40 Person p1=newPerson();41 p1.setName("name1");42 p1.setPass("pass1");43 Person p2=newPerson();44 p2.setName("name2");45 p2.setPass("pass2");46 Person p3=newPerson();47 p3.setName("name3");48 p3.setPass("pass3");49 list.add(p1);50 list.add(p2);51 list.add(p3);52 returnlist;53 }54 public SetgetSet() {55 HashSet set=new HashSet();56 Person p1=newPerson();57 p1.setName("name1");58 p1.setPass("pass1");59 Person p2=newPerson();60 p2.setName("name2");61 p2.setPass("pass2");62 Person p3=newPerson();63 p3.setName("name3");64 p3.setPass("pass3");65 set.add(p1);66 set.add(p2);67 set.add(p3);68 returnset;69 }70 }71
72 1.2、com.yeeach.Person73 packagecom.yeeach;74
75 public classPerson {76
77 publicString getName() {78 returnname;79 }80 public voidsetName(String name) {81 this.name =name;82 }83 publicString getPass() {84 returnpass;85 }86 public voidsetPass(String pass) {87 this.pass =pass;88 }89 privateString name;90 privateString pass;91
92 }
2、Flex 端
2.1、helloworld.mxml
layout="vertical">
id="test1">
result="sayHelloResult(event)"/>
result="sayWorldResult(event)"/>
result="getMapResult(event)"/>
result="getListResult(event)"/>
result="getSetResult(event)"/>
click="sayHello(event);"/>
click="sayWorld(event);"/>
click="test1.getMap()"/>
click="test1.getList()"/>
click="test1.getSet()"/>
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+" \n 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);
}
}
]]>
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其他类型的处理,相对简单,可以参考