我有一个 Facelets(JSF 1.2 (myfaces)) web 应用程序,我想自定义我的错误页面——当应用程序成熟时,这似乎是一件很自然的事情。在这个过程中我真的很困惑。
我发现了以下内容:
我还没有找到自定义 Facelets 错误页面的方法。我还没有找到模板在哪里。我找到了覆盖执行 sendRedirect() 的 ViewHandler 的解决方案。我认为这应该可以在不编写代码的情况下完成,尤其是 ViewHandler。
我找到了一种关闭 Facelets 错误处理并使用 myFaces 的方法:
代码:
<context-param>
<param-name>facelets.DEVELOPMENT</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.ERROR_TEMPLATE_RESOURCE</param-name>
<param-value>/pages/public/errorPage.jsf</param-value>
</context-param>
不幸的是,我似乎无法让 myFaces 找到 JSF 页面。我需要使用 jsf 页面,因为我想使用分散在几个模板上的网站布局。来源:http ://wiki.apache.org/myfaces/Handling_Server_Errors
- 我尝试了一个战斧解决方案:
网页.xml:
<context-param>
<param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.ERROR_HANDLER</param-name>
<param-value>org.apache.myfaces.tomahawk.util.ErrorRedirectJSFPageHandler</param-value>
</context-param>
面孔-config.xml:
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>java.lang.Throwable</from-outcome>
<to-view-id>/pages/public/errorPage.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
来源:http ://wiki.apache.org/myfaces/Handling_Server_Errors
- 我发现我可以通过
<error-page>
in使用容器的错误处理web.xml
。我成功转发到一个 jsf 错误页面。这里的问题是我无法显示异常 - 我不知道如何。
更新:我发现了如何 - 使用 ManagedBean:
public class ErrorDisplayBean {
public String getStackTrace() {
FacesContext context = FacesContext.getCurrentInstance();
Map requestMap = context.getExternalContext().getRequestMap();
Throwable ex = (Throwable) requestMap.get("javax.servlet.error.exception");
...
}
}
有关其余代码,请参见http://wiki.apache.org/myfaces/Handling_Server_Errors 。
我想要完成的事情:我想在不编写代码的情况下使用 Facelets 的错误处理机制,并且能够在 jsf 页面上显示异常。如果那不可能,我想再次使用 myFaces 的错误处理,并在异常中显示。我认为其中之一应该是可能的。