[英]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.