我已经按照this教程获取了一些Flex代码来调用托管在Tomcat服务器上的Java代码。
这是我的RemoteObject和Button调用远程函数的方式:
<mx:RemoteObject id="productService" destination="productJavaService" result="resultHandler(event)" fault="faultHandler(event)"/>
<mx:Button label="Get all Products" click="productService.getAllProducts()" />
这些是resultHandler和faultHandler函数的定义:
private function resultHandler(event:ResultEvent):void
{
products = event.result as ArrayCollection;
}
private function faultHandler(event:FaultEvent):void
{
Alert.show(event.fault.faultString);
}
对我来说,这个问题的一个明显问题是resultHandler与RemoteObject整体关联,而不是与单个函数关联。如果我添加一个新函数,如“getSingleProduct”,那么显然需要使用不同的resultHandler。如何在功能级别指定resultHandler?
答案 0 :(得分:4)
您可以在method
下定义RemoteObject
属性,在您的情况下,它将是getAllProducts()
;你可以这样做:
<mx:RemoteObject id="Server" destination="ServerDestination" fault="faultHandler(event)">
<mx:method name="getAllProducts" result="getAllProductsHandler(event)"/>
<mx:method name="getOneProduct" result="getOneProductHandler(event)"/>
</mx:RemoteObject>
答案 1 :(得分:1)
只是想添加:如果有人想通过actionscript实现这一点,你可以通过向服务调用返回的AsyncToken添加一个Responder来使用actionscript执行此操作:
var responder:Responder = new Responder(onGetOneProductResult, onGetOneProductFault);
var token:AsyncToken = Server.getOneProduct();
token.addResponder(responder);
private function onGetOneProductResult(event:ResultEvent):void {
// event.result is the data you sent back from the server
var result:Object = event.result;
}
private function onGetOneProductFault(event:FaultEvent):void {
trace("onGetOneProductFault : "+event.fault.faultString);
}