S2Flex2 を触ってみた その2
うーむ。助言を頂いたがまだ繋がらない。
AMF0Connection
package org.seasar.flex2.rpc.remoting { import flash.events.Event; import flash.net.NetConnection; import flash.net.ObjectEncoding; import flash.net.Responder; import flash.util.trace; import mx.events.EventDispatcher; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.rpc.AbstractService; import mx.utils.Delegate; import org.seasar.flex2.net.AMF0Connection; /** * * @author nod * @author sato-shi * */ dynamic public class SimpleAMF extends AbstractService { [DefaultTriggerEvent("result")] /** @private */ [Event("fault")] /** @private */ [Event("result")] private var _con:AMF0Connection; [Inspectable(type="String")] public var gatewayUrl:String; public function SimpleAMF(){ super(); } private function initConnection(){ _con = new AMF0Connection(); //_con.objectEncoding = ObjectEncoding.AMF0; _con.addHeader("DescribeService", false, 0); _con.connect(this.gatewayUrl); } public function remoteCall(methodName:Object, args:Object):void { if(_con==null){ initConnection(); } var callMethod:String =this.destination +"." +methodName; var responder:Responder = new Responder(this.onResult,this.onFault); if(args){ _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); } } }
Person.as
package flexcoder.java2as3.sample { [Bindable] [RemoteClass(alias="org.openamf.examples.Person")] public class Person{ public var firstName : String; public var lastName : String; public var address : String; public var city : String; public var state : String; public var zipCode : int; public var birthDate : Date; public var extraInfo : Array; } }
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.macromedia.com/2005/mxml" xmlns="*" xmlns:s2="org.seasar.flex2.rpc.remoting.*" layout="absolute" > <s2:SimpleAMF id="amf" destination="org.openamf.examples.TestBean" gatewayUrl="http://localhost:8080/openamf/gateway" result="onResult(event)" fault="onFault(event)"/> <mx:Script> <![CDATA[ import org.seasar.flex2.rpc.remoting.SimpleAMF; import mx.controls.Alert; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import flash.events.Event; import mx.utils.ObjectUtil; import org.seasar.flex2.rpc.remoting.SimpleAMF; import flexcoder.java2as3.sample.Person; import flash.util.trace; import flash.net.registerClassAlias; [Bindable] public var array:Array; [Bindable] public var person:Person; public function doRemoteCall():void{ //openAMFsample //amf.remoteCall("getTestValue"); amf.remoteCall("getPerson",null); //amf.remoteCall("hello"); } public function onResult(event:Event){ person = Person(ResultEvent(event).result); } public function onFault(event:Event){ trace(event); //result_txt.text=mx.utils.ObjectUtil.toString( FaultEvent(event).fault ); } ]]> </mx:Script> <mx:TextArea x="10" y="20" id="result_txt"/> <mx:Button x="118" y="19" label="getTestValue" id="trigger_btn" click="doRemoteCall();"/> </mx:Application>
他に足りないことは・・・。