2012-05-10 32 views
0

在我的JSF应用程序中,每当发生异常时,它都应显示一个JSF页面,该页面旨在向用户显示发生错误,但不会发生这种情况,这是大问题。没有重定向到web.xml中指定的页面

部分我的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> 

回答

3

当一个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错误页面一个是superflous。

+0

感谢balusC,但没有其他办法?因为我不能使用库OmniFaces或任何其他组件,通过客户端的命令! – Carlos

+0

它是开源的。它应该为您创建自己的自定义'ExceptionHandler'提供见解。 – BalusC