2012-05-08 178 views
4

我尝试了omniFaces的AjaxExceptionHandler(这很有帮助),并将其配置为捕获java.lang.Throwable以及源于各种请求(不仅仅是ajax请求)的异常。如何使用自定义异常处理程序处理javax.el.PropertyNotFoundException

它工作的很好,但是当开发人员拼写错误的EL表达式时,它并没有赶上javax.el.PropertyNotFoundException

所以问题是:如何处理javax.el.PropertyNotFoundExceptionExceptionHandlerFactory机制的JSF2?

回答

2

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> 

您可能要将此开发/测试环境只有这样在观看侧的任何错误可以被发现和实时环境可以继续使用默认的缓冲区大小,以节省服务器内存。

+0

奇怪的是我看到异常处理程序运行之前在服务器日志中的异常。对于其他例外,这不会发生。所以我看到'PropertyNotFoundException'两次,一次在异常处理程序之前,然后异常处理程序用此行记录它'context.getExternalContext()。log(String.format(LOG_EXCEPTION_OCCURRED,errorPageLocation),exception);' t看到一个半成品页面,我只是在没有菜单的情况下获得应用程序的背景(但加载了所有的JSF资源(* .css,* .js))。提及MyFaces和IBM WAS8会发生这种情况有帮助吗? – jonnie119

+0

**是**半页的页面。在浏览器中右键单击和*查看源代码*。检索到的HTML响应不完整,因为由于此异常而被中止。 – BalusC

+0

我在JBoss上部署了一个测试应用程序,并在Mojarra和MyFaces之间切换;都工作正常,你的异常处理程序完美地处理它! 但是增加缓冲区大小对Websphere AS没有帮助。所以这个问题是在我们的应用程序或在WAS8的一般设置,我还不知道这是一个设置。我会发布进一步的调查结果 – jonnie119