我使用omnifaces FullAjaxExceptionHandler重定向時發生任何異常與ajax請求,在我的情況下捕獲ViewExpiredException。重定向後的JSF Ajax(ViewRoot)更新
我會盡力解釋我的情況:?
1)我有一個命令按鈕(Ajax請求的index.xhtml頁)無效的會話,並返回一個動作像這樣「/登錄面臨重定向=真」。
2)在同一瀏覽器中打開index.xhtml兩次。
3)在第一個的index.xhtml中單擊按鈕(會話是無效,並重定向到login.xhtml)
在這一點上您考慮我有一個自定義的PhaseListener來檢查用戶是否成功地記錄,login.xhtml是向公衆開放,但的index.xhtml僅限於授權用戶,web.xml中的視圖過期,403錯誤是:
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/index.xhtml</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/403.xhtml</location>
</error-page>
4)轉到第二的index.xhtml(會話無效在這一刻),現在點擊按鈕啓動異常。
FullAjaxExceptionHandler捕獲ViewExpiredException並嘗試呈現index.xhtml,但同時我的phaselistener正在檢查用戶是否被授權,如會話失效,用戶未被授權,並且我的PhaseListener觸發responseSendError(403) ,但沒有顯示403.xhtml,因爲是ajax請求。
如何從我的PhaseListener發送403錯誤以顯示403.xhtml? responseSendError取消了FullAjaxExceptionHandler的正常處理,此時此異常發生時不發生重定向。
此外,爲了澄清視圖何時到期,我需要重定向到index.xhtml,因爲在生產中我使用CAS(中央身份驗證服務)。
在這種情況下,我需要讀取web.xml以獲取配置的錯誤頁面。我會改變我的代碼。謝謝Balus。 – Kab 2013-02-20 13:19:23