2012-05-10 31 views
0

在我的JSF應用程序中,每當發生異常時,它都應顯示一個JSF頁面,該頁面旨在向用戶顯示發生錯誤,但不會發生這種情況,這是大問題。沒有重定向到web.xml中指定的頁面

部分我的web.xml的

<error-page> 
     <exception-type>java.lang.Exception</exception-type> 
     <location>/faces/error.jsf</location> 
    </error-page> 
    <error-page> 
     <error-code>500</error-code> 
     <location>/faces/error.jsf</location> 
    </error-page> 

回答

3

當一個Ajax請求期間發生異常時,或當響應已經提交出現異常,可以發生。

ajax請求的異常需要由自定義ExceptionHandler來處理。 OmniFaces有這樣一個,FullAjaxExceptionHandler它利用標準的Servlet API錯誤頁面機制。

響應提交時的異常無法處理,因爲響應的一部分已經發送到客戶端,這是一個不歸路。它只能在web.xml通過以下上下文參數提高響應緩衝區大小來避免:

<context-param> 
    <param-name>javax.faces.FACELETS_BUFFER_SIZE</param-name> 
    <param-value>65535</param-value>  
</context-param> 

上面的例子將它設置爲64KB,它應該是對你最大的頁面大小。這樣,只有在大小達到64KB或完成時,響應纔會被提交。通過這種方式,當發生異常時,容器將能夠更改對錯誤頁面的響應。


無關的具體問題,你的方式錯誤頁面配置有重疊。例外總是隱含狀態500,並且您指向相同的錯誤頁面。所以與java.lang.Exception錯誤頁面一個是superflous。

+0

感謝balusC,但沒有其他辦法?因爲我不能使用庫OmniFaces或任何其他組件,通過客戶端的命令! – Carlos

+0

它是開源的。它應該爲您創建自己的自定義'ExceptionHandler'提供見解。 – BalusC