我正在開發異常處理框架。異常處理框架用於JSF應用程序。在JSF中處理未捕獲的異常
我面臨的問題是跟蹤未捕獲的異常並顯示一條通用消息。我能夠處理未捕獲的異常(例如單擊按鈕),但是我無法在加載JSF頁面或初始化時在框架級別捕獲未捕獲的運行時異常。任何幫助將真正被讚賞。
感謝, 普拉薩德
我正在開發異常處理框架。異常處理框架用於JSF應用程序。在JSF中處理未捕獲的異常
我面臨的問題是跟蹤未捕獲的異常並顯示一條通用消息。我能夠處理未捕獲的異常(例如單擊按鈕),但是我無法在加載JSF頁面或初始化時在框架級別捕獲未捕獲的運行時異常。任何幫助將真正被讚賞。
感謝, 普拉薩德
這取決於你如何/趕上他們在哪裏。通常情況下,你想指定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)方面做業務邏輯被認爲是不好的做法的原因之一。
感謝您的迴應。目前我有處理程序來處理所有的未捕獲的異常,並在faces-config.xml中包含它
我不知道,因爲我從來沒有使用這種方法來處理異常,但它對我來說是有意義的,他們是無法處理的。你想用他們做什麼? – BalusC 2010-06-08 17:12:02
捕獲異常並在同一頁面上顯示錯誤消息,而不是導航到其他頁面。消息將使用
myfaces或mojarra? 1.2或2.0 – Bozho 2010-06-08 16:30:34