2015-06-18 72 views
3

我有一个单击事件处理程序中有一些SSJS代码的按钮。它基本上调用了一个说真或假的Java方法。因此,我想要触发onComplete和onError CSJS脚本:onComplete成功,onError失败。不幸的是,我还没有弄清楚如何触发onError事件 - 至少不是以一种优雅的方式。我的第一种方法是返回200以外的HTTP状态码(这里是500)。这会触发onError,但会在浏览器控制台中产生一个丑陋的错误消息。如何触发onError客户端事件

那么是否有其他选项来控制SSJS的结果来调用onComplete或onError脚本?

UPDATE

同时我发现了一个解决办法,但我仍然有兴趣在我的问题的解决方案。

我的解决方法是不使用的onComplete/onError的脚本,但叫我既成功/通过

view.postscript("success()"); 

view.postscript("fail()"); 

这是一个更简洁的方法我觉得在我的SSJS直接失败脚本。

+0

您可以尝试使用RPC调用Java方法,并使用递延回调测试成功或失败。 http://notesspeak.blogspot.com/2014/10/my-first-experience-using-json-rpc.html –

回答

3

你可以在SSJS或Java事件发回自己的状态代码:

<xp:this.action><![CDATA[#{javascript:facesContext.getExternalContext().getResponse().setStatus(999);}]]></xp:this.action> 

要防止控制台记录,你可以使用Dojo的XHR请求failOk参数禁用它们(禁用控制台记录所有请求):

if(!dojo._xhr) 
    dojo._xhr = dojo.xhr; 

dojo.xhr = function(){   
    try{ 
     var args = arguments[1]; 
     args["failOk"] = true; 
     arguments[1] = args; 
    }catch(e){} 

    dojo._xhr(arguments[0], arguments[1], arguments[2]); 
} 

现在你可以添加一个错误处理方法,你的活动:

<xp:this.onError><![CDATA[errorHandler(arguments[0], arguments[1])]]></xp:this.onError> 

在该方法中,你可以从你的事件检查状态代码并做你想做的,如果代码匹配:

<script> 
    function errorHandler(err, xhr){ 
     if(err.status == 999){ 
      // whatever 
     } 
    } 
</script> 
+0

不错的解决方案!感谢Sven! –

相关问题