今天摸索了一下Flex3中使用RemoteObject和Java類的通訊問題,感覺非常方便,雖然使用HttpService也可以,但多了一個(gè)控制器,并且還要對數(shù)據(jù)進(jìn)行處理;而使用RemoteObject,則可能直接訪問類方法。
要注意的是在編譯Java文件時(shí),不能使用JDK1.5以上的版本,開始我用的是JDK1.6,Tomcat容器啟動(dòng)的時(shí)候,提示版本異常,后來改成Jdk1.5,錯(cuò)誤才得以消除。
雖然程序運(yùn)行成功,但我一直沒找到將Web Project與Flex Project整合的好方法,Eclipse插件在我這里似乎有問題,所以,我是先使用命令編譯好類,然后放到Flex工程中去的。記得安裝LCDS服務(wù)器,管方網(wǎng)站有下載,并提供了序列號。
廢話少說,看步驟:
第一步:為了測試Flex對復(fù)雜類型List的支持,所以我寫了一個(gè)方法用于返回元素類型為Student的List。先看Student類代碼:
package com.aptech.flex;
public class Student
{
private int sid;
private String sname;
public Student(int sid, String sname){
this.sid = sid;
this.sname = sname;
}
public Student(){
}
public int getSid(){
return this.sid;
}
public String getSname(){
return this.sname;
}
public void setSid(int sid){
this.sid = sid;
}
public void setSname(String sname){
this.sname = sname;
}
}
第二步:創(chuàng)建示意性的業(yè)務(wù)方法,返回List<Student>集合,習(xí)慣使用泛型,如果不用泛型應(yīng)該也能處理。
package com.aptech.flex;
import java.util.*;
public class HelloWorld
{
public String sayHello(String str){
return str + "你好";
}
public List<Student> strList(){
List<Student> list = new ArrayList<Student>();
list.add(new Student(1, "張三"));
list.add(new Student(2, "李四"));
list.add(new Student(3, "王八"));
return list;
}
}
第三步:修改<Tomcat>/lcds/flex/remoting-config.xml配置文件,添加如下語句:
<destination id = "hw">
<properties>
<source>com.aptech.flex.HelloWorld</source>
<scope>application</scope>
</properties>
</destination>
在該文件中,貌似不能寫中文注釋,啟動(dòng)容器時(shí)出現(xiàn)異常。
第四步:創(chuàng)建Flex工程,定義<mx:RemoteObject />,內(nèi)容如下:
<mx:RemoteObject id="hwro" destination="hw"></mx:RemoteObject>
這里的destination必須和第三步的<destination id = "hw">一致。
第五步:定義一個(gè)按鈕,并觸發(fā)單擊事件。
<mx:Button x="123" y="154" label="訪問JAVA類" click="doJava(event)"/>
doJava事件定義如下:
internal function doJava(event: Event): void{
//hwro.sayHello("李贊紅");
hwro.strList();
hwro.addEventListener(ResultEvent.RESULT, onCallback);
}
以下是結(jié)果處理方法:
private function onCallback(event: ResultEvent): void{
var ac: ArrayCollection = event.result as ArrayCollection;
var arr: Array = ac.toArray();
var str: String = "";
for(var a in arr){
str += arr[a].sid + "," + arr[a].sname + ""n";
}
Alert.show(str);
}
Flex將Java類的List自動(dòng)轉(zhuǎn)換成了ArrayCollection類型,該示例中List元素類型為Student,則可以使用E.屬性來訪問。