如何触发 onError 客户端事件

How to trigger the onError client side event

我在点击事件处理程序中有一个带有一些 SSJS 代码的按钮。它基本上调用一个 Java 方法来判断真或假。因此,我还想触发 onComplete 和 onError CSJS 脚本:onComplete 表示成功,onError 表示失败。不幸的是,我还没有弄清楚如何触发 onError 事件——至少不是以一种优雅的方式。我的第一种方法是 return 一个不同于 200(这里是 500)的 HTTP 状态码。这会触发 onError 但会在浏览器控制台中产生难看的错误消息。

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

更新

虽然我找到了解决方法,但我仍然对我的问题的解决方案感兴趣。

我的解决方法是不使用 onComplete/onError 脚本,而是通过

在我的 SSJS 中直接调用我的两个 success/fail 脚本
view.postscript("success()");

view.postscript("fail()");

我认为这是一种更简洁的方法。

您可以在 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>