2009-07-16 6 views
0

J'ai suivi le tutoriel this pour obtenir du code Flex pour appeler du code Java hébergé sur un serveur Tomcat.Flex/BlazeDS - resultHandler par appel de fonction non par RemoteObject?

Voici comment mon RemoteObject et le bouton pour appeler la fonction à distance est déclarée:

<mx:RemoteObject id="productService" destination="productJavaService" result="resultHandler(event)" fault="faultHandler(event)"/> 
<mx:Button label="Get all Products" click="productService.getAllProducts()" /> 

Ce sont les définitions des fonctions resultHandler et faultHandler:

private function resultHandler(event:ResultEvent):void 
{ 
    products = event.result as ArrayCollection; 
} 

private function faultHandler(event:FaultEvent):void 
{ 
    Alert.show(event.fault.faultString); 
} 

Le problème évident avec cette pour moi, c'est le resultHandler est associé à RemoteObject dans son ensemble plutôt qu'à la fonction individuelle. Si j'ajoute une nouvelle fonction telle que "getSingleProduct" alors évidemment un résultat différentHandler devra être utilisé. Comment puis-je spécifier le résultatHandler au niveau de la fonction?

Répondre

4

Vous pouvez définir une propriété method sous RemoteObject, dans votre cas, ce serait getAllProducts(); Vous pouvez le faire comme ceci:

<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> 
+0

Parfait - merci :) – William

1

Je voulais juste ajouter: au cas où quelqu'un veut réaliser cela avec actionscript, vous pouvez le faire avec actionscript en ajoutant un Responder au AsyncToken retour de l'appel de service:

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