这个问题可能过于模棱两可,但我正在寻找一些关于处理JavaServer Faces应用程序中异常的帮助或最佳实践。
现在,每当我捕获一个异常时,我都会记录它,然后抛出我创建的另一个异常,比如MyCustomException。此自定义异常接受捕获的Throwable对象,并将堆栈跟踪发送给我,以便我知道发生了异常。就目前而言,这似乎适用于我,直到出现异常时才得到通知。
但是,我遇到的问题是如何向用户提供一个非常错误的页面,让他们知道出了什么问题,并且已经通知了错误。在进行一些搜索时,我遇到了几篇文章,这些文章展示了如何使用类似于以下内容的方法将用户重定向到另一个页面:
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext extContext = context.getExternalContext();
String url = extContext.encodeActionURL(extContext.getRequestContextPath() +
"/messages.faces");
extContext.redirect(url);但这似乎是相当多的基本上复制和粘贴每个捕获的异常,这不完全符合干燥原则。最后,我想我要做的是在异常发生时向我发送一封电子邮件,然后将消息发送到一个通用错误页面,然后将消息显示给用户。
有什么我应该遵循的想法或最佳做法吗?谢谢您能给我的任何建议!我很困惑。
注意:如果有帮助的话,我将使用JSF2.0和。
发布于 2010-10-22 22:00:03
这个urls可能对您有用:
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/
http://download.oracle.com/docs/cd/E17802_01/j2ee/javaee/javaserverfaces/2.0/docs/api/javax/faces/context/ExceptionHandler.html
基本上,您必须在JSF2.0,ExceptionHandler中使用新特性。这是处理意外异常的中心点。您可以指示每个异常类型使用哪个页面。
发布于 2010-10-22 21:08:37
您可能希望使用servlet过滤器来捕获(并处理)异常。这样,只有一个全局捕获块:-)
也就是说,您可以在FacesServlet周围映射一个过滤器,这样做:
try {
chain.proceed(request, response);
} catch (Exception e) {
// handle the exception
}您的JSF实现也可能有错误页面的概念。如果是这样,您可能必须禁用错误页,以便异常到达筛选器。
您可能会发现http://javaboutique.internet.com/tutorials/Servlet_Filters/很有用。
https://stackoverflow.com/questions/4000798
复制相似问题