当前位置: 代码迷 >> Web前端 >> 使用parsley的DynamicCommand捕捉java端抛出的错误
  详细解决方案

使用parsley的DynamicCommand捕捉java端抛出的错误

热度:45   发布时间:2012-11-10 10:48:51.0
使用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
为每个匹配消息创建一个新的命令实例。多个命令对象可以并发执行,并且不进行任何交互。