Ajax 如何从JSF2.2中的错误页面preRenderView重定向?

Ajax 如何从JSF2.2中的错误页面preRenderView重定向?,ajax,jsf,redirect,jsf-2.2,omnifaces,Ajax,Jsf,Redirect,Jsf 2.2,Omnifaces,我想在我的应用程序中将JSF2.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

我想在我的应用程序中将JSF2.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>

500
/错误/500.jsf
为了捕获ajax post中的错误,omnifaces的FullAjaxExceptionHandlerFactory在faces-config.xml中声明:

<factory>
    <exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory>
</factory>

org.omnifaces.exceptionhandler.fullajaxexceptionhandler工厂
在错误页面中有一个preRenderView函数,其中有一个条件重定向。在JSF2.1中,它工作得非常好。但是对于JSF 2.2,在重定向的情况下,由于其他一些异常,我得到以下消息:

哎呀

处理ajax请求时出现问题。随后, 处理错误页时发生另一个问题,应 告诉你那个问题

日志中的另一个异常:

严重:FullAjaxExceptionHandler:嗯,发生了另一个异常 在呈现错误页面'/error/500.jsf'期间。试图呈现一个 现在是硬编码错误页面。java.lang.IllegalStateException:无法 写入数据后更改缓冲区大小

我尝试使用其他事件处理程序,而不是preRenderView(我认为可能应该在生命周期的早期进行重定向(?)。对于postAddToView事件,结果是相同的,根本不调用其他事件

我也尝试使用JSF2.2的f:viewAction来代替f:event,但是在ajax post的情况下,在错误页面上没有调用任何可能的viewAction事件(onPostback=“true”参数也没有帮助)

问题:

在重定向的情况下,为什么会在错误页面上出现另一个异常?(myfaces 2.1没有任何问题)

为什么在错误页面上根本不调用viewAction函数?(当错误导致转到ajax请求中出现的错误页面时)

那么如何使用JSF(myfaces)2.2从错误页面进行(有条件的)重定向?