[英]Handling exceptions in a JSF application
這可能是一個模棱兩可的問題,但是我正在尋找有關JavaServer Faces應用程序中異常處理的幫助或最佳實踐。
現在,每當我捕獲到異常時,我都會記錄該異常,然后拋出另一個創建的異常,即MyCustomException
。 此自定義異常將捕獲到的Throwable
對象發送給我,並將堆棧跟蹤信息通過電子郵件發送給我,以便我知道已發生異常。 就目前而言,就異常發生時得到通知而言,這似乎對我有用。
但是,我遇到的麻煩是如何向用戶顯示一個漂亮的錯誤頁面,該頁面使他們知道出現了問題並且已將錯誤通知我。 在進行搜索時,我遇到了幾篇文章,這些文章展示了如何使用類似於以下內容的方法將用戶重定向到另一個頁面:
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext extContext = context.getExternalContext();
String url = extContext.encodeActionURL(extContext.getRequestContextPath() +
"/messages.faces");
extContext.redirect(url);
但是,對於每個捕獲的異常,這似乎需要大量復制和粘貼,這並不完全遵循DRY原理。 最后,我想我想做的就是每當發生異常時都發送一封電子郵件給我,然后能夠將消息發送到通用錯誤頁面,然后將錯誤消息顯示給用戶。
我應該遵循的任何想法或最佳做法? 預先感謝您提供的任何建議! 我很沮喪
注意:如果有幫助,我正在使用JSF 2.0和Facelets。
該網址可能對您有用:
http://weblogs.java.net/blog/edburns/archive/2009/09/03/dealing-gracefully-viewexpiredexception-jsf2
http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/
基本上,您必須在JSF2.0中使用ExceptionHandler的新功能。 這是處理意外異常的中心點。 您可以指示每種異常類型使用哪個頁面。
您將要使用類似servlet過濾器的功能來捕獲(並處理)異常。 這樣,只有一個全局catch塊:-)
也就是說,您將圍繞FacesServlet映射一個過濾器,該過濾器可以:
try {
chain.proceed(request, response);
} catch (Exception e) {
// handle the exception
}
您的JSF實現可能還具有錯誤頁面的概念。 如果是這樣,則可能必須禁用錯誤頁面,以使異常到達過濾器。
您可能會發現http://javaboutique.internet.com/tutorials/Servlet_Filters/有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.