Flex / BlazeDS - 每个函数调用的resultHandler不是每个RemoteObject?

时间:2009-07-16 09:18:48

标签: flex blazeds

我已经按照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?

2 个答案:

答案 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);
}