nod::ぶろぐ::RIA::Flash/Flex/Ajax

FlashやFlex,(Ajax),S2Flex2,ActionScript3,yui-frameworks,Akabanaプロジェクトなどのメモ帳

S2Flex2開発記(5) AMF0で接続するタグ(第一弾)

Flex2がBeta1になってからしばらく経ち、試行錯誤でやっと開発環境ができてきました。
これまでAlpha1で作成していたものの移行も少しずつできてきたので、これまでできている部分を遅ればせながらコミットしました。

このエントリーを書いたときにはEventの受け渡し方法がわからず、サーバロジックを呼び出したあとに結果を受け取ることができなかったのですがdispatchEventを使うことでなんとかできました。

タグで指定された、イベント(result,fault)をサーバロジック実行時のResponderに直接渡すのがうまくできませんでした。

なのでResponderに設定された関数からdispatchEventを利用してresult,faultを呼び出すように変更したところうまく動くようになりました。\(^o^)/

まずは実際に呼び出す部分です。
これまでは、Responderのコンストラクタで指定するResult,Faultに、タグで指定されたresult,faultを直接指定しようとしていました。

<s2:SimepleAMF id="amf" result="onResultData(event)" fault="onFaultData(event)" ..../>

上記のタグ例ですと、onResultData(event),onFaultData(event)を直接Responderに渡そうとしていたのです。

方法がわからなかったので、以下のようにResponderにはタグクラス内のFunctionを呼び出してその中でdispatchEventを発行します。
そうするとタグで指定されたFunctionを呼び出すことができました。

public function remoteCall(methodName:Object, ...args):void {
if(_con==null){
initConnection();
}
var callMethod:String = this.destination +"." +methodName;

var responder:Responder =
new Responder(this.onResult,this.onFault);


if(args.length>0){

_con.call(callMethod,responder,args);

}else{

_con.call(callMethod,responder);

}

}

public function onResult(resultData:Object){

var resultEvent:ResultEvent=

                new ResultEvent(resultData,null,null);


dispatchEvent(resultEvent);

}

public function onFault(faultData:Object){

var faultEvent:FaultEvent =
                new FaultEvent(faultData,null,null);

dispatchEvent(faultEvent);

}

今日、SVNにコミットしたのは以下のプロジェクトになります。


S2flex2_swc


Flexライブラリプロジェクト作成しました。これまでのRemoteObjectの形式(AMF 0)で接続するタグ用のプロジェクトです。
現在のところ、
mx.rpc.remoting.mxml.RemoteObjectをextendsしたSimpleAMFが
実際に使うことができるものになります。

Flexライブラリプロジェクトというくらいなので、swcを作ることができると思うのですが現在設定がわかりません。
なので、antを利用してswcを作るようにしてあります。

compcのパラメータがalpha1とBeta1では全然異なっていました。(-_-;)

S2flex2_examples

S2fledx2_swcで生成した、タグを使うサンプルです。 いまはS2flex2_examples.mxmlしかありません。

localhostで動いてるopenAMFのサンプル(TestBean)に接続して
getTestValueメソッドを呼び出すようにしています。

タグは以下のように記述しています。


<s2:SimpleAMF id="amf" result="onResult(event)" destination="org.openamf.examples.TestBean" showBusyCursor="false" gatewayUrl="http://localhost:8080/openamf/gateway" />




これでやっとスタート地点に立てたかなと思うので今後はこれをもとに

  • S2OpenAMFに接続してみる。
  • コンパイル時に指定しているflex-services.xmlを利用できるようにする
などを行っていこうと思います。
Posted by nod at 2006年02月07日 21:32 | コメント (3) | トラックバック (0) | Clip!! | Clip!! | このエントリーを含むはてなブックマーク |digg it! |del.icio.us it!

この記事に対するコメント

サーバサイドで定義しているgatewayUrlをFlexで利用できるようになれば、Flex側は完成ですね。

Posted by: ひが at 2006年02月08日 14:54

s2flexプロジェクトを結構いじりました。
org.seasar.flex2.amfにあるweb.xmlを参考にして、web.xmlを書いて、test/resourcesにあるs2flex.diconをapp.diconに登録すると、試せるかも。
Flexとつなげてのテストは明日からします。
後、プロジェクト名のS2を他のプロジェクトに習って小文字にしました。
ご迷惑をかけするかもしれませんがよろしくお願いします。

Posted by: ひが at 2006年02月08日 19:39

Flex側のタグについては、swfコンパイル時のオプションで指定している
flex-services.xmlの内容を取得して、gatewayUrlにセットできればと思っています。
FES2やColdFusionと同じ形式です。
そのあたりはdebuggerで追いながら調べています。
少し気になるのがmx.rpc.remotingパッケージがlivedocsをみると
Flex Enterprise Services onlyとなっていることです。
このあたりのパッケージに含まれているクラスもFES2の一部となると
また少し作り直す必要があるのかなと思いました。

s2flex2プロジェクト昨晩少しみました。
はじめて2~3日でもうAMFgatewayの実装をほとんどしたのですね。
さすが早いです。ほんとすごい..

また、プロジェクト名称変更了解いたしました。
今後作成するときには気をつけます。m(__)m

あと、s2flex2の中でnamespaceを利用する場合はどのようにするべきか
決めかねています。
■s2jsf
xmlns:m="http://www.seasar.org/maya"
■mayaa
xmlns:m="http://mayaa.seasar.org"
■mxml
xmlns:mx="http://www.macromedia.com/2005/mxml"
■s2flex2は..
xmlns:s2="http://www.seasar.org/2005/s2flex2/"
xmlns:s2="http://www.seasar.org/flex2/"
xmlns:s2="http://s2flex2.seasar.org/flex2/"

これまでの慣習や、よい案がありましたら教えていただけますか。
よろしくお願いいたします。

Posted by: nod at 2006年02月09日 16:37

コメントを投稿する




保存しますか?



この記事のトラックバックURL


この記事に対するトラックバック

この記事に対するトラックバックはまだありません。



Flex.org - The Directory for Flex Get Adobe Flash Player Made with dreamweaverMade with fireworksPowered by Movable Type 3.33-jaPowered by Wandering Wind
Copyright : [Articles] (C) nod::ぶろぐ::RIA::Flash/Flex/Ajax All Rights Reserved.
[Comments/Trackbacks] ... Authors of those have rights.