【问题标题】:Handling exceptions in a JSF application在 JSF 应用程序中处理异常
【发布时间】:2010-10-22 20:43:16
【问题描述】:

这个问题可能过于含糊,但我正在寻找有关处理 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。

【问题讨论】:

    标签: java jsf


    【解决方案1】:

    这个网址可能对你有用:

    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。这是处理意外异常的中心点。 您可以指明每种异常类型使用哪个页面。

    【讨论】:

      【解决方案2】:

      您需要使用类似 servlet 过滤器的东西来捕获(和处理)异常。这样,只有一个全局 catch 块:-)

      也就是说,您将在 FacesServlet 周围映射一个过滤器:

      try {
          chain.proceed(request, response);
      } catch (Exception e) {
          // handle the exception
      }
      

      您的 JSF 实现也可能包含错误页面的概念。如果是这样,您可能必须禁用错误页面,以便异常到达过滤器。

      您可能会发现http://javaboutique.internet.com/tutorials/Servlet_Filters/ 很有帮助。

      【讨论】:

        猜你喜欢
        • 2013-01-16
        • 2011-07-13
        • 1970-01-01
        • 2012-05-01
        • 2014-05-04
        • 2011-08-19
        • 1970-01-01
        • 2011-09-16
        • 1970-01-01
        相关资源
        最近更新 更多