记录下来,供用到时参考下:
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>
3. 从此以下就是在*.mxml文件中书写的内容了,引用在remoteing-config.xml文件中暴漏出的remote对象
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
<s:RemoteObject id="testService" destination="testService">
<s:method name="getPersons" result="clickHandler2(event);"/>
</s:RemoteObject>
</fx:Declarations>
解析:并声明出该对象的方法getPersons,声明出处理返回结果的回调函数clickHandler2(event);
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)在这个代码段中给出了处理集合返回对象的方式:
2)得到返回集合中对象元素的属性值的第一种方法:var persons:ArrayCollection = event.result as ArrayCollection;
3)得到集合返回对象元素的属性值的第二种方法(引入和javaBean对象对应的as对象的方式):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); }
注意:里面的Person类型是as的对象类型,声明在下面的5部分。var person:Person = persons.getItemAt(0) as Person; Alert.show(".."+person.name+","+ person.age);
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()函数,将会触发结果处理函数来完成alert()工作。clickHandler2(event)