使用parsley的DynamicCommand捕捉java端抛出的异常

 我用的是flex4+cairgorm3。

flex端需要捕捉java端抛出的异常,之前的做法是:

<fx:Declarations>

<rule:AddUserCommand/>

</fx:Declarations>

AddRuleCommand.as中,定义如下方法:

[CommandFault(selector="add")] 
public function error(fault:Fault):void
{ 
     if(fault.rootCause != null)
     { 
           Alert.show(fault.rootCause.message,"错误"); 
      }else{
           Alert.show(fault.faultString,"错误"); 
      }
 } 

 

 

Java端抛出异常:

 

throw new CollectUserException("添加用户时,名字不能为空");

可是这样,当java端抛出异常时,前端却毫无反应。这里我们要做出修改:

Context里面用到parsleyDynamicCommnad标签:

 

 

<fx:Declarations>

  <DynamicCommand type="{AddUserCommand}" selector="add"/>

</fx:Declarations>

 

AddRuleCommand.as改为:

 

 

public function error(fault:Fault):void

{

              if(fault.rootCause != null && fault.rootCause.message != undefined)

              {

                    Alert.show(fault.rootCause.message,"错误");

              }else{

                    Alert.show(fault.faultString,"错误");

              }

}  

这里注意:去掉了[CommandFault(selector="add")],因为我们已经在DynamicCommand里面定义了。这样就能够显示异常弹出框了。

 

--------------------------------------------------------------------

DynamicCommand:

 

 

对于Command层,方法至少有三个:execute,resultfault,代码如下:

public class SaveUserCommand {
    [Inject]
    public var service:RemoteObject;

    public function execute (event:UserEvent) : AsyncToken {
        return service.saveUser(event.user);
    }

    public function result (user:User) : void {
        // do something with the result
    }
   
    public function error (fault:Fault) : void {
        // do something with the result
    }
   
}

 

我们一般用一个完整的命令对象对结果进行处理。这个对象仅是单个方法,用于执行命令。
parsley
为每个匹配消息创建一个新的命令实例。多个命令对象可以并发执行,并且不进行任何交互。

你可能感兴趣的:(java,Flex)