Flexの実装(AsyncTokenとAsyncResponder、Javaのリモート呼び出し)

クライアント側(Flex)から、Javaのリモート呼び出しして、
復帰値(Objectのリスト)を取得して、コンボボックスに設定するプログラムを
作りました。

まず、sample.mxml作成。



<![CDATA[
import mx.collections.ArrayCollection;
import mx.rpc.AsyncResponder;
import mx.rpc.AsyncToken;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;

[Bindable]
private var combData:ArrayCollection;

[Bindable]
private var te:String;

//List内Objectが型変換されるためのオマジナイ!!
public var fru:Fruite = new Fruite();

//AsyncToken使って、戻り値取得する
private function setComb():void{
var async:AsyncToken = remo.getList();//Javaのリモート呼び出し
async.addResponder(new AsyncResponder(successFunc,failFunc));
}

//リモートアクセス成功時
private function successFunc(e:ResultEvent, obj:Object=null):void{
combData = e.result as ArrayCollection;
comb.selectedIndex = 1;
te = Fruite(comb.selectedItem).name;
trace("success");
}

//リモートアクセス失敗時
private function failFunc(e:FaultEvent, obj:Object=null):void{
trace("FaultCode:" + e.fault.faultCode + "\n" + "FaultString:" + e.fault.faultString + "\n"
+ "FaultDetail:" + e.fault.faultDetail);
trace("fault");
}

//コンボボックス変更時、アクション
private function changeComb():void{
te = String(Fruite(comb.selectedItem).id);
}

] ]>







次にJavaの呼び出されるクラスTest.java作成。
※remoting-config.xmlへの記述もお忘れなく!!



package serv;
import java.util.ArrayList;
import java.util.List;
import beans.Fruite;

public class Test {

private List list;
//復帰値は、Fruiteオブジェクトの配列
public Test(){
list = new ArrayList();
list.add(new Fruite(1,"メロン"));
list.add(new Fruite(2,"みかん"));
}
//呼び出されるメソッド
public List getList(){
return list;
}

}

でもって、JavaBeanのFruite.java


package beans;
import java.io.Serializable;

public class Fruite implements Serializable{

public Fruite(int id, String name){
this.id = id;
this.name = name;
}

private int id;
private String name;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

Flex側のBeanのFruite.as



package
{
[Bindable]
[RemoteClass(alias="beans.Fruite")]//これで、JavaのBeanとの関連づけ
public class Fruite
{
public var id:int;
public var name:String;
//publicにすること。これで、1時間ほど悩まされました。><)
}
}

参考になったサイト
[Seasar-user:14682] Re: [S2BlazeDS]Array 型からjava.util.List型への変換