2015-06-18 74 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! –

相關問題