2010-06-08 61 views
1

我正在開發異常處理框架。異常處理框架用於JSF應用程序。在JSF中處理未捕獲的異常

我面臨的問題是跟蹤未捕獲的異常並顯示一條通用消息。我能夠處理未捕獲的異常(例如單擊按鈕),但是我無法在加載JSF頁面或初始化時在框架級別捕獲未捕獲的運行時異常。任何幫助將真正被讚賞。

感謝, 普拉薩德

+0

myfaces或mojarra? 1.2或2.0 – Bozho 2010-06-08 16:30:34

回答

3

這取決於你如何/趕上他們在哪裏。通常情況下,你想指定web.xml<error-page>對於像這樣:

<error-page> 
    <exception-type>java.lang.Exception</exception-type> 
    <location>/error.html</location> 
</error-page> 

這基本上顯示了error.html頁任何e instanceof java.lang.Exception

另一種方法是捕捉它在Filter監聽/*url-pattern

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
    try { 
     chain.doFilter(request, response); 
    } catch (Exception e) { 
     request.setAttribute("exception", e); 
     request.getRequestDispatcher("/error.html").forward(request, response); 
    } 
} 

這確實基本上是相同的,你在控制響應和做其他的東西像我只多一點自由日誌記錄。

無論哪種方式,只要響應已被提交(即頭已經發送到客戶端),它將會失敗。然後,您應該注意到服務器日誌中有一個IllegalStateException: response already committed,並且客戶端將面對半個(甚至空白)頁面。這是一個不歸路。您希望在呈現響應之前執行任何業務邏輯。這也是在視圖(JSP/Facelets)方面做業務邏輯被認爲是不好的做法的原因之一。

+0

感謝您的迴應。目前我有處理程序來處理所有的未捕獲的異常,並在faces-config.xml中包含它 \t \t <動作監聽> com.exception.listener.UncheckedExceptionListener \t \t \t 這會在發生操作時處理所有未捕獲的異常,但這不會處理onAgeLoade或預呈現的調用異常。請讓我知道,如何處理這個。 – Nrusingha 2010-06-08 17:09:12

+0

我不知道,因爲我從來沒有使用這種方法來處理異常,但它對我來說是有意義的,他們是無法處理的。你想用他們做什麼? – BalusC 2010-06-08 17:12:02

+0

捕獲異常並在同一頁面上顯示錯誤消息,而不是導航到其他頁面。消息將使用顯示 – Nrusingha 2010-06-08 19:37:49