如果我的业务层有异常(例如我的JDBC连接bean中的SQL异常),那么我如何用自定义消息将其传播到全局error.jsp页面? JSF 1.x不提供这种类型的任何隐式错误处理,尽管您可以使用导航规则
<navigation-case> <description> Handle a generic error outcome that might be returned by any application Action. </description> <display-name>Generic Error Outcome</display-name> <from-outcome>loginRequired</from-outcome> <to-view-id>/must-login-first.jsp</to-view-id> </navigation-case>
…或使用重定向…
FacesContext context = FacesContext.getCurrentInstance(); ExternalContext extContext = context.getExternalContext(); String url = extContext.encodeActionURL(extContext .getRequestContextPath() + "/messages.faces"); extContext.redirect(url);
我建议您查看JSF specification了解更多详情。
您可以根据需要将错误消息放置在请求范围/会话范围/ url参数上。
假设一个Servlet容器,可以使用通常的web.xml error page configuration。
<error-page> <exception-type>java.lang.Exception</exception-type> <location>/errorPage.faces</location> </error-page>
在你的支持bean中,你可以在RuntimeException中打包并抛出你的异常。
一些JSF实现/框架将捕获这些错误(Apache MyFaces / Facelets),所以你必须要configure them not to。