没有重定向到web.xml中指定的页面

时间:2012-05-10 13:29:32

标签: jsf jsf-2 exception-handling

在我的JSF应用程序中,每当发生异常时,它应该显示一个JSF页面,我设计该页面向用户显示发生了错误,但没有发生这种情况,这是一个大问题。

我的web.xml的一部分

    <error-page>
        <exception-type>java.lang.Exception</exception-type>
        <location>/faces/error.jsf</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/faces/error.jsf</location>
   </error-page>

1 个答案:

答案 0 :(得分:4)

在ajax请求期间发生异常时,或者在响应已经提交时发生异常时,可能会发生这种情况。

ajax请求的异常需要由自定义ExceptionHandler处理。 OmniFaces有一个FullAjaxExceptionHandler,它使用标准的Servlet API错误页面机制。

提交响应时的异常无法处理,因为响应的一部分已经发送到客户端,这是一个不可逆转的点。只能通过web.xml中的以下上下文参数增加响应缓冲区大小来避免它:

<context-param>
    <param-name>javax.faces.FACELETS_BUFFER_SIZE</param-name>
    <param-value>65535</param-value>    
</context-param>

上面的示例将其设置为64KB,它应该是您最大页面的大小。这样,在大小达到64KB或完成时,响应将不会被提交。这样,当发生异常时,容器将能够更改对错误页面的响应。


对于具体问题,

无关,你在那里错误页面配置的重叠方式。异常隐式地始终为状态500,并且您指向相同的错误页面。因此,java.lang.Exception的错误页面1是超级的。