使用JSF生成HTTP错误代码页面以及异常错误页面?

8bi*_*kie 4 jsf web.xml exception-handling error-code

我知道可以使用web.xml中的配置提供自定义错误404页面,如下所示:

<error-page>  
       <error-code>404</error-code>  
         <location>/NotFound.jsp</location>  
 </error-page>  
Run Code Online (Sandbox Code Playgroud)

但是,我预计许多错误代码网页将非常相似 - 只有错误代码和文本会发生变化.

为了减少过多的文件并重新使用,将参数传递给具有所有常用HTML和CSS优点的通用页面会很不错.

我使用Apache MyFaces,并阅读了ExceptionHandlerFactory(这里),但我发现没有错误代码的规定.

是否可以自定义错误代码页面的唯一方法是为每个我想要自定义的错误代码创建一个,并使用web.xml连接它们?:-(

Bal*_*usC 9

错误页面可以只是一个JSF页面.如果您正在运行支持Servlet 3.0的容器,则可以使用全局错误页面:

<error-page>  
    <location>/error.jsf</location>  
</error-page> 
Run Code Online (Sandbox Code Playgroud)

如果您正在运行Servlet 2.5容器或更早版本,或碰巧使用的Tomcat 7仍然没有实现截至目前的全局错误页面,那么您需要为每个状态代码指定单独的错误页面,但它们都可以指向相同的错误页面.

<error-page>  
    <status-code>404</status-code>
    <location>/error.jsf</location>  
</error-page> 
<error-page>  
    <status-code>500</status-code>
    <location>/error.jsf</location>  
</error-page> 
Run Code Online (Sandbox Code Playgroud)

状态代码和异常类型在EL中可用,如下所示:

Status code: #{requestScope['javax.servlet.error.status_code']}
Exception type: #{requestScope['javax.servlet.error.exception_type']}
Run Code Online (Sandbox Code Playgroud)

如有必要,您可以对此进行有条件的检查.请注意,默认情况下,例外的状态代码始终为500.

如果您正在使用JSP的后继Facelets,那么模板化将更加容易.