我有一个Facelets(JSF 1.2(myfaces))网络应用程序,我想自定义我的错误页面 - 这在应用程序成熟时似乎是很自然的事情。 我在这个过程中感到很困惑。
我发现了以下内容:
我还没有找到一种方法来自定义Facelets的错误页面。我还没找到模板的位置。我找到了覆盖ViewHandler的解决方案,它将执行sendRedirect()。我认为这应该可以在不编写代码的情况下完成,尤其是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
的web.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>
faces-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>
中的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页面上显示Exception。如果那是不可能的,我想再次使用myFaces的错误处理显示异常。我认为其中一个应该是可能的。
答案 0 :(得分:3)
我认为您仍然可以通过web.xml进行配置:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.xhtml</location>
</error-page>
也可以用于错误代码..