我想在我的应用程序中将JSF 2.1(myfaces)升级到2.2。我刚刚在TomEE / lib文件夹(TomEE-1.7.5)中更改了两个myfaces .... jar文件。除了一件事,一切似乎都运作良好。我在web.xml中配置了错误页面:
<error-page>
<error-code>500</error-code>
<location>/error/500.jsf</location>
</error-page>
为了在ajax post的情况下捕获错误,在faces-config.xml中声明了omnifaces的FullAjaxExceptionHandlerFactory:
<factory>
<exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory>
</factory>
在错误页面中有一个 preRenderView 函数,其中有一个条件重定向。在JSF 2.1中,它运行得很好。但是在重定向的情况下使用JSF 2.2,由于其他一些异常,我收到了这条消息:
糟糕!
处理ajax请求时出现问题。随后, 处理错误页面时应该发生另一个问题 告诉你这个问题。
日志中的另一个例外:
SEVERE:FullAjaxExceptionHandler:嗯,发生了另一个异常 在渲染错误页面'/error/500.jsf'期间。试图渲染一个 现在硬编码的错误页面。 java.lang.IllegalStateException:不能 写入数据后更改缓冲区大小
我尝试使用其他事件处理程序而不是 preRenderView (我想可能应该在生命周期的早期阶段(?)进行重定向)。使用 postAddToView 事件时结果相同,其他事件根本不会被调用。
而不是 f:event 我尝试使用JSF 2.2的 f:viewAction ,但是在ajax的情况下,没有任何可能的viewAction事件被调用错误页面(onPostback =“true”参数也没有帮助)。
问题:
为什么在重定向的情况下我在错误页面上得到了另一个异常? (myfaces 2.1没有任何问题)
为什么在错误页面上根本没有调用viewAction函数? (当错误导致转到ajax请求中出现的错误页面时)
那么如何使用JSF(myfaces)2.2从错误页面进行(条件)重定向?