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>
他に足りないことは・・・。