代码之家  ›  专栏  ›  技术社区  ›  Jared

处理JSF应用程序中的异常

  •  2
  • Jared  · 技术社区  · 14 年前

    这可能是一个模棱两可的问题,但我正在寻找一些帮助或最佳实践来处理JavaServerFaces应用程序中的异常。

    现在,每当我捕获一个异常时,我都会记录它,然后抛出另一个我创建的异常,比如 MyCustomException . 此自定义异常采用 Throwable 对象,并通过电子邮件将堆栈跟踪发送给我,以便我知道发生了异常。就目前而言,在发生异常时得到通知,这似乎对我有用。

    但是,我遇到的问题是如何向用户显示一个相当错误的页面,让他们知道出了问题,并通知了我该错误。在进行一些搜索时,我遇到了几篇文章,介绍了如何使用类似以下内容将用户重定向到另一个页面:

    FacesContext context = FacesContext.getCurrentInstance();
    ExternalContext extContext = context.getExternalContext();
    
    String url = extContext.encodeActionURL(extContext.getRequestContextPath() +
        "/messages.faces");
    
    extContext.redirect(url);
    

    但对于每个捕获到的异常,这似乎有点基本上是复制和粘贴的,这并不完全遵循干燥原则。最后,我想我要做的是在发生异常时向我发送一封电子邮件,然后能够将消息发送到一个通用错误页面,然后将消息显示给用户。

    我应该遵循什么想法或最佳实践?提前感谢您提供的任何建议!我被难住了。

    注: 如果有帮助的话,我使用的是JSF 2.0和Facelets。

    2 回复  |  直到 13 年前
        1
  •  4
  •   angelcervera    14 年前
        2
  •  1
  •   meriton    14 年前

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

    也就是说,您将围绕Facesservlet映射一个过滤器,它可以:

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

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

    你可能会发现 http://javaboutique.internet.com/tutorials/Servlet_Filters/ 乐于助人。