Error handling 自定义Facelets错误页面

Error handling 自定义Facelets错误页面,error-handling,facelets,web.xml,myfaces,faces-config,Error Handling,Facelets,Web.xml,Myfaces,Faces Config,我有一个Facelets(JSF1.2(myfaces))web应用程序,我想定制我的错误页面——当应用程序成熟时,这似乎是一件很自然的事情。 在这个过程中我真的很困惑 我发现: 我还没有找到自定义Facelets错误页面的方法。我还没有找到模板的位置。我找到了覆盖ViewHandler的解决方案,该处理程序将执行sendRedirect()。我认为这不需要编写代码就可以实现,尤其是ViewHandler 我找到了一种关闭Facelets的错误处理和使用myFaces的方法: 代码: 有关代

我有一个Facelets(JSF1.2(myfaces))web应用程序,我想定制我的错误页面——当应用程序成熟时,这似乎是一件很自然的事情。 在这个过程中我真的很困惑

我发现:

  • 我还没有找到自定义Facelets错误页面的方法。我还没有找到模板的位置。我找到了覆盖ViewHandler的解决方案,该处理程序将执行sendRedirect()。我认为这不需要编写代码就可以实现,尤其是ViewHandler

  • 我找到了一种关闭Facelets的错误处理和使用myFaces的方法:

代码:

有关代码的其余部分,请参见


我想完成的:我想使用Facelets的错误处理机制,而不需要编写代码,并且能够在jsf页面上显示异常。如果这是不可能的,我想在异常中再次使用myFaces的错误处理。我认为其中一个应该是可能的

我认为您仍然可以通过web.xml进行配置:

 <error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/error.xhtml</location>
 </error-page>

java.lang.Throwable
/error.xhtml

这也可以用于错误代码。

我现在离这个项目很远,不能(不想)测试,但因为你花了时间回答这个问题,你赢得了奖励:)
<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>
<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>
public class ErrorDisplayBean {
    public String getStackTrace() {
        FacesContext context = FacesContext.getCurrentInstance();
        Map requestMap = context.getExternalContext().getRequestMap();
        Throwable ex = (Throwable) requestMap.get("javax.servlet.error.exception");
        ...
    }
}
 <error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/error.xhtml</location>
 </error-page>