1

在我的 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>
4

1 回答 1

4

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

ajax 请求的异常需要由自定义处理ExceptionHandlerOmniFaces就有这样一个,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是多余的。

于 2012-05-10T13:38:49.423 回答