2012-07-03 20 views
3

我正在使用Omnifaces FullAjaxExceptionHandler - 這很好用,但是當我做一個ajax調用並且有一個onevent函數檢查狀態=='成功'時,它是仍然被調用,即使FullAjaxExceptionHandler已經呈現錯誤頁面。 (我使用JSF(鑽嘴魚科2.1.3在GlassFish 3.1.1)Omnifaces - FullAjaxExceptionHandler - f:ajax onevent status is success

JSF代碼:

<h:commandButton value="myButton"> <f:ajax listener="#{myBean.myBeanFunction()}" render="someDiv" onevent="myFunction"/> </h:commandButton>

JavaScript代碼:

function myFunction(e) { if (e.status == 'success') { alert("Success"); } }

所以我需要一些方法如果FullAjaxExceptionHandler帶我進入錯誤頁面,則不執行javascript函數

+0

設計不可能改變ajax響應狀態,錯誤狀態會導致響應數據被忽略(並且因此最終用戶不會得到任何反饋)。什麼是你需要在「成功」狀態上掛鉤的功能需求,以及它究竟以這種方式失敗?它可以以不同的方式解決。 – BalusC

+0

當ajax調用成功完成時,我需要顯示一個對話框,但是當調用過程中出現錯誤時,它會呈現錯誤頁面,但仍會嘗試顯示對話框。該對話框實際上並不顯示,但對話框是模態的,因此錯誤頁面以模態背景結束,並且您無法單擊頁面上的任何內容。如果FullAjaxExceptionHandler呈現錯誤頁面,有什麼辦法可以不執行onevent javascript?或者是否有辦法在onevent javascript函數中放置某種數據,這樣可以檢查,以便我不試圖顯示對話框? – jc12

+0

我剛剛發現,如果您使用primefaces p:commandButton,或者如果使用p:ajax,則它可以正常工作。不知道爲什麼它使用f:ajax時工作不同。 – jc12

回答

4

您可以檢查爲foll OWS如果返回的XML響應並不表明一個render="@all"的情況下(這說明在整個文檔將被替換):

if (e.responseXML.getElementById('javax.faces.ViewRoot') == null) { 
    // ... 
} 

它的工作原理與PrimeFaces命令組件的oncomplete是因爲它不使用標準的JSF ajax API來做到這一點,並以更直觀的方式做不同的事情。

相關問題