我尝试了omniFaces 的AjaxExceptionHandler(这很有帮助)并将其配置为捕获java.lang.Throwable
来自各种请求(不仅是ajax 请求)的异常。
javax.el.PropertyNotFoundException
它工作得很好,但是当开发人员拼错 EL 表达式时它不会被捕获。
那么问题来了: JSF2javax.el.PropertyNotFoundException
的机制如何处理?ExceptionHandlerFactory
我尝试了omniFaces 的AjaxExceptionHandler(这很有帮助)并将其配置为捕获java.lang.Throwable
来自各种请求(不仅是ajax 请求)的异常。
javax.el.PropertyNotFoundException
它工作得很好,但是当开发人员拼错 EL 表达式时它不会被捕获。
那么问题来了: JSF2javax.el.PropertyNotFoundException
的机制如何处理?ExceptionHandlerFactory
FullAjaxExceptionHandler
应该可以应付。您的具体问题可能是因为您有一个相对较大的页面溢出了 Facelets 的默认缓冲区大小 2KB,因此在引发异常时响应已经提交。提交响应时,响应的一部分已经发送到客户端。无法取回已发送的字节并使用错误页面呈现新的响应。不使用 ajax 时,您会遇到完全相同的问题。相反,该异常将被记录下来,并且客户端将卡在一个半生不熟的页面上。
您可能希望将默认响应缓冲区大小增加到最大 HTML 响应的大小。这样,响应将在第一个字节发送到客户端之前生成并完全缓冲在服务器的内存中。您可以通过javax.faces.FACELETS_BUFFER_SIZE
上下文参数设置它,web.xml
以字节为单位的缓冲区大小作为值。以下示例将其设置为 64KB。
<context-param>
<param-name>javax.faces.FACELETS_BUFFER_SIZE</param-name>
<param-value>65535</param-value>
</context-param>
您可能只想在开发/测试环境中设置它,以便可以发现视图端的任何错误,并且实时环境可以继续使用默认缓冲区大小来节省服务器内存。