【问题标题】:no redirect to page specified in web.xml没有重定向到 web.xml 中指定的页面
【发布时间】:2012-05-10 13:29:32
【问题描述】:

在我的 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>

【问题讨论】:

    标签: jsf jsf-2 exception-handling


    【解决方案1】:

    当异常发生在 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 的错误第一页是多余的。

    【讨论】:

    • 感谢balusC,但没有其他办法?因为我不能使用OmniFaces库,或者任何其他组件,按照客户的命令!
    • 它是开源的。它应该让您了解如何创建自己的自定义 ExceptionHandler
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2013-06-18
    • 2021-08-24
    • 1970-01-01
    • 2012-10-07
    • 2019-04-27
    • 2021-11-22
    相关资源
    最近更新 更多