在我的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>
答案 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是超级的。