项目中有个业务场景需要servlet给flex返回一系列属性对象,既希望如同
blaze+remoteObject调用java接口那样能获得一个类似Map或者List的面向对象对象。
目前已知的servlet通过pResponse.getWriter().write("返回信息”);的方式返回给前台信息,这里可考虑用json或者XML处理。
这里分别简述下两者的用法。
一、JSON
要在flex中使用json,首先要下一个json包。
代码示例:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" >
<mx:Script>
<![CDATA[
import com.adobe.serialization.json.JSON;
private var jsonStr1:String = '{"name":"xiaolu","age":"20","sex":"male"}';
[Bindable] private var jsonObject1:Object;
[Bindable] private var jsonStr2:String;
/**
* json串转换为as对象
*/
public function json2as(jsonStr:String):void{
jsonObject1 = JSON.decode(jsonStr) as Object;
}
/**
* as对象转换为json串
*/
public function as2json():void{
var jsonObject = new Object();
jsonObject['name'] = userName.text;
jsonObject['sex'] = userAge.text;
jsonObject['age'] = userSex.text;
jsonStr2 = JSON.encode(jsonObject) as String;
}
]]>
</mx:Script>
<mx:Panel width="100%" height="100%">
<mx:HBox>
<mx:Form>
<mx:FormItem label="jsonString">
<mx:TextArea id="jsonText" text="{jsonStr1}" />
</mx:FormItem>
</mx:Form>
<mx:Button id="but1" label="json2as" click="json2as(jsonText.text);" />
<mx:Form>
<mx:FormItem label="name:">
<mx:TextInput text="{jsonObject1.name}" />
</mx:FormItem>
<mx:FormItem label="age:">
<mx:TextInput text="{jsonObject1.age}" />
</mx:FormItem>
<mx:FormItem label="sex:">
<mx:TextInput text="{jsonObject1.sex}" />
</mx:FormItem>
</mx:Form>
</mx:HBox>
<mx:HBox width="70%">
<mx:Form>
<mx:FormItem label="name:">
<mx:TextInput id="userName" text="xiao" />
</mx:FormItem>
<mx:FormItem label="age:">
<mx:TextInput id="userAge" text="20" />
</mx:FormItem>
<mx:FormItem label="sex:">
<mx:TextInput id="userSex" text="male" />
</mx:FormItem>
</mx:Form>
<mx:Button id="but2" label="as2json" click="as2json();" />
<mx:Form>
<mx:FormItem label="jsonString">
<mx:TextArea text="{jsonStr2}" />
</mx:FormItem>
</mx:Form>
</mx:HBox>
</mx:Panel>
</mx:Application>
二、XML
转换过程
String->XMLDocument->Object
代码示例(简略):
public function xml2Object():Object{
var xmlStr:String = "<node name='xiao'age='20'></node>";
var xmlDoc:XMLDocument = newXMLDocument(xmlStr);
var decoder:SimpleXMLDecoder = new SimpleXMLDecoder(true);
var resultObj:Object =decoder.decodeXML(xmlDoc);
return resultObj;
}
最后附上infoQ上的一篇精彩的文章
http://www.infoq.com/cn/articles/flex-xml-json;jsessionid=0F77EEC0C2B1473DDEE083C46A37CBB6