【问题标题】:JSF exception handling [duplicate]JSF 异常处理 [重复]
【发布时间】:2012-11-06 22:25:54
【问题描述】:

可能重复:
JSF 1.2 Exception Handling

在我的应用程序中,一旦发生应用程序错误或系统错误,我们就会抛出异常并直接在后台 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

【问题讨论】:

    标签: java jsf


    【解决方案1】:

    随便放

    <h:messages />
    

    在你的jsp中

    【讨论】:

    • 这个模糊的问题确实留下了一些歧义;我认为OP的实际问题是在同一个请求中显示错误页面本身,这确实不是明显;)
    【解决方案2】:

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

       <%@ pageisErrorPage=”true”%>
    

    或在您的部署描述符中。

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

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

    【讨论】:

    • 我做了和你说的一样的事情,它可以工作并将我带回错误页面,但我在 jsp 上几乎没有显示的控制按钮。我在项目中的工作是一旦系统中发生异常,我需要控制异常,捕获它并将其转换为faces消息并在error.jsp上显示,使会话无效,并且必须有办法导航回来从 jsp 到主菜单。
    • @ylnsagar,在此处分享您的错误页面上的标记。我假设您已在该页面上添加了 jsf taglib 声明?
    【解决方案3】:

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

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

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

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

    Persist and pass FacesMessages over multiple page redirects


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

    • sessionExpired.xhtml

    • loginRequired.xhtml

    • pageNotFound.xhtml

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

    Dealing Gracefully ViewExpiredException - JSF 2.0


    OP 评论后更新

    按照这些步骤,让我知道它是否有效。

    1. 使用 ExceptionHandler(如@Ed Burn's Blog 解释)
    2. 在您的ExceptionHandlerhandle() 方法中注册您的faceMessage
    3. &lt;h:messages/&gt; 放入您的error.jsp 以查看它。
    4. 要使会话无效或导航到主菜单,请使用您的erroPage.jsp 中的errorPageBean.action()

    【讨论】:

    • 我的error.jsp 还有一个控制按钮,可以导航回主菜单。我只需要在 error.jsp 中显示 faces 消息,使会话无效并导航回主菜单。
    猜你喜欢
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多