记录下来,供用到时参考下:
1. 后台的java代码
public class TestService { public List<PersonBean> getPersons(){ List<PersonBean> list = new ArrayList<PersonBean>(); list.add(new PersonBean("zhangsan",20)); list.add(new PersonBean("lisi",21)); list.add(new PersonBean("wangwu",22)); return list; } }
2. 在remoting-config.xml文件中暴漏出该java类对象,供flex中的as对象调用解析:1)PersonBean 是一个javaBean 只有两个属性String name,int age;这里不再给出
<service id="remoting-service" class="flex.messaging.services.RemotingService"> <adapters> <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/> </adapters> <default-channels> <channel ref="my-amf"/> </default-channels> <destination id="testService"> <properties> <source>com.test.service.TestService</source> </properties> </destination> </service>
<fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> <s:RemoteObject id="testService" destination="testService"> <s:method name="getPersons" result="clickHandler2(event);"/> </s:RemoteObject> </fx:Declarations>
4. 处理结果的回调函数clickHandler2(event);
<fx:Script> <![CDATA[ import com.test.model.Person; import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.rpc.events.ResultEvent; private function clickHandler2(event:ResultEvent):void{ var persons:ArrayCollection = event.result as ArrayCollection; for(var i:Number=0;i<persons.length;i++){ var name:String = persons.getItemAt(i).name; var age:Number = persons.getItemAt(i).age; Alert.show(name+":"+age); } var person:Person = persons.getItemAt(0) as Person; Alert.show(".."+person.name+","+ person.age); } ]]> </fx:Script>解析:这里是该demo的重点:
1)在这个代码段中给出了处理集合返回对象的方式:
var persons:ArrayCollection = event.result as ArrayCollection;2)得到返回集合中对象元素的属性值的第一种方法:for(var i:Number=0;i<persons.length;i++){ var name:String = persons.getItemAt(i).name; var age:Number = persons.getItemAt(i).age; Alert.show(name+":"+age); }3)得到集合返回对象元素的属性值的第二种方法(引入和javaBean对象对应的as对象的方式):var person:Person = persons.getItemAt(0) as Person; Alert.show(".."+person.name+","+ person.age);注意:里面的Person类型是as的对象类型,声明在下面的5部分。
5. 声明as对象,该对象和javaBean对象相对应
package com.test.model { [Bindable] [RemoteClass(alias="com.test.bean.PersonBean")] public class Person { public function Person() { } private var _name:String; private var _age:Number; public function set name(_name:String):void{ this._name = _name; } public function get name():String{ return this._name; } public function set age(_age:Number):void{ this._age = _age; } public function get age():Number{ return this._age; } } }注意:1) 注意变量的写法
2)注意变量的get和set方法的写法(和java中不一样)
3)注解的写法,【Bindable】:忘记怎么解释了?应该是绑定远程对象的意思!
4)【RemoteClass(alias="com.test.bean.PersonBean")】用于至此那个和远程类中的哪个类相绑定。
如果在mxml文件中有button元素如下:
<s:Button label="clickHandler" click="buttonClick2();"/>对应的处理函数如下:private function buttonClick2():void { this.testService.getPersons(); }
当点击该button时,将触发buttonClick2()方法,将调用getPersons()函数,将会触发结果处理函数clickHandler2(event)来完成alert()工作。