1

可能重复:
JSF 1.2 异常处理

在我的应用程序中,一旦发生应用程序错误或系统错误,我们就会抛出异常并直接在后台 bean 处捕获。在支持 bean 中,我捕获了异常,并将异常转换为 FacesContext 消息,如下所示

/**
* 
*/
public void createFacesExceptionMsg(Exception e){   
    String caughtAt = e.getStackTrace()[0].toString();
        if (null != caughtAt && !caughtAt.isEmpty()) {
            getFacesContext().addMessage(null, new FacesMessage   (FacesMessage.SEVERITY_ERROR, 
                    caughtAt, null));
        } else {
            getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                    "Local message not set when Exception thrown - Application in error state", null));
        }           
}

我必须在errorpage.jsp 上呈现异常。

如何在 errorPage.jsp 上打印 facesContext 消息

它的jsf1.2

4

3 回答 3

1

如果我理解正确你想要做的是

  1. 捕捉异常
  2. 将 facesMessage 放入上下文
  3. 重定向到 error.jsp
  4. 在 error.jsp 上显示 facesMessage

在 JSF 参考实现中,在页面之间传递全局面孔消息不起作用。它的设计不是“开箱即用”的。幸运的是,有一种方法可以做到这一点,它甚至可以支持页面之间的重定向、通过 RequestDispatcher 转发以及通过标准 JSF 导航案例。

如果这是你想在这里做的,你去

通过多个页面重定向保持并传递 FacesMessages


如果您需要一种通过重定向处理异常的方法,例如

  • sessionExpired.xhtml

  • loginRequired.xhtml

  • pageNotFound.xhtml

从 JSF 的开发人员 (Ed Burns) 那里了解 ExceptionHandlerFactory

优雅地处理 ViewExpiredException - JSF 2.0


OP 评论后更新

请按照以下步骤操作,让我知道它是否有效。

  1. 使用 ExceptionHandler (如@ Ed Burn's Blog所述)
  2. handle()在您的方法中注册您的 facesMessageExceptionHandler
  3. 放入<h:messages/>您的error.jsp 以查看它。
  4. errorPageBean.action()要使会话无效或从您的导航到主菜单使用erroPage.jsp
于 2012-11-07T09:02:39.500 回答
1

就放

<h:messages />

在你的jsp中

于 2012-11-07T01:12:15.270 回答
1

如果您在 Web 应用程序中抛出常规 java 异常,则可以使用隐式页面范围对象访问它${pageContext.exception}。您只能在通过页面级别声明指定为错误页面的页面内访问此对象

   <%@ pageisErrorPage=”true”%>

或在您的部署描述符中。

如果您使用的是新的 jsp 2.x,您可以访问新的 jsp 2.x,javax.servlet.jsp.ErrorData因为${pageContext.errorData它通过成员变量为您提供有关异常的一些信息,例如

  1. requestURI :违规请求的 URI
  2. servletName :失败的 servlet/JSP 页面的名称。
  3. statusCode:Http状态码
  4. throwable :实际的异常对象和关联的成员字段。
于 2012-11-07T03:01:44.173 回答