Jsf 如何使用自定义异常处理程序处理javax.el.PropertyNotFoundException

Jsf 如何使用自定义异常处理程序处理javax.el.PropertyNotFoundException,jsf,exception,jsf-2,exception-handling,omnifaces,Jsf,Exception,Jsf 2,Exception Handling,Omnifaces,我尝试了omniFaces的AjaxExceptionHandler(这非常有用),并将其配置为捕获java.lang.Throwable和来自所有类型请求(不仅仅是ajax请求)的异常 它工作得很好,但是当开发人员拼写错误el表达式时,它不会捕获javax.el.PropertyNotFoundException 所以问题是:如何使用JSF2的ExceptionHandlerFactory机制处理javax.el.PropertyNotFoundException 用户应该能够处理它。您的具体

我尝试了omniFaces的AjaxExceptionHandler(这非常有用),并将其配置为捕获
java.lang.Throwable
和来自所有类型请求(不仅仅是ajax请求)的异常

它工作得很好,但是当开发人员拼写错误el表达式时,它不会捕获
javax.el.PropertyNotFoundException

所以问题是:如何使用JSF2的
ExceptionHandlerFactory
机制处理
javax.el.PropertyNotFoundException

用户应该能够处理它。您的具体问题可能是因为您有一个相对较大的页面,该页面溢出了Facelets的默认缓冲区大小2KB,因此在引发异常时已经提交了响应。提交响应时,响应的一部分已经发送到客户端。没有办法将已发送的字节取回,并用错误页面显示新的响应。如果不使用ajax,您也会遇到同样的问题。异常将被记录下来,客户端将被一个不完整的页面卡住

您可能希望将默认响应缓冲区大小增加到最大HTML响应的大小。这样,在将第一个字节发送到客户端之前,将生成响应并在服务器内存中充分缓冲。您可以通过
web.xml
中的
javax.faces.FACELETS\u BUFFER\u SIZE
上下文参数设置它,以字节为单位的缓冲区大小作为值。下面的示例将其设置为64KB


javax.faces.FACELETS\u缓冲区\u大小
65535

您可能只想在开发/测试环境中设置此选项,以便能够发现视图端的任何错误,并且实时环境可以继续使用默认缓冲区大小来保存服务器内存。

奇怪的是,在异常处理程序运行之前,我在服务器日志中看到异常。对于其他例外情况,这种情况不会发生。因此,我看到
PropertyNotFoundException
两次,一次在异常处理程序之前,然后异常处理程序用以下行记录它
context.getExternalContext().log(String.format(log\u exception\u occurrent,errorPageLocation),exception)我也没有看到一个半生不熟的页面,我只看到应用程序的背景,没有菜单(但加载了所有JSF资源(*.css,*.js)。提到MyFaces和IBM WAS8会发生这种情况有帮助吗?这是一个不完整的页面。右键单击并在浏览器中查看源。检索到的HTML响应不完整,因为它由于此异常而被中止;两者都工作得很好,异常处理程序处理得很好!但是,增加缓冲区大小对WebSphereAS没有帮助。所以这个问题是我们应用程序中的一个设置,或者是WAS8中的一个一般设置,我还不知道。我会发布进一步的发现谢谢你的反馈。我现在还没有8岁,所以我无法调查。你也测试过WAS CE吗?这是免费提供的。@BalusC是一台完全不同的服务器。它是由IBM重新命名的Geronimo。