处理来自Primefaces Ajax请求的业务异常

处理来自Primefaces Ajax请求的业务异常,primefaces,exception-handling,spring-webflow,ajax-request,Primefaces,Exception Handling,Spring Webflow,Ajax Request,我使用Spring MVC,Primefaces/JSF作为查看器,Spring Webflow作为控制器,我遇到以下问题: 我试图发送一个带有primefaces组件commandButton的AJAX事件,其中我的流转换到一个抛出空指针异常的方法。第一个请求一切正常!响应是500 HTTP状态,该方法不执行的第二个请求导致200 HTTP状态响应。所有连续的动作都遵循相同的模式,起作用和不起作用。深入研究代码,我发现在方法JsfView.processUserEvent(执行Jsf生命周期的

我使用Spring MVC,Primefaces/JSF作为查看器,Spring Webflow作为控制器,我遇到以下问题:

我试图发送一个带有primefaces组件commandButton的AJAX事件,其中我的流转换到一个抛出空指针异常的方法。第一个请求一切正常!响应是500 HTTP状态,该方法不执行的第二个请求导致200 HTTP状态响应。所有连续的动作都遵循相同的模式,起作用和不起作用。深入研究代码,我发现在方法JsfView.processUserEvent(执行Jsf生命周期的地方)中,当一切正常时,指令facesContext.getRenderResponse()返回true,否则返回false。因此,我调查了为什么会发生这种情况,并了解到在Jsf生命周期结束时,该标志被设置为true(好的,faces告诉我们渲染响应阶段已经执行了)但是,当下一个ajax请求到达时,这个标志为true,JSF生命周期不会运行,因为方法ViewState.handleEvent认为没有什么需要处理,什么也不做

我没有找到任何关于如何处理来自AJAX请求的业务代码异常的信息(我知道如果没有ajax请求,您可以调用重定向,一切都会正常工作,但是使用ajax请求,整个页面都会刷新,这不是我希望从ajax请求中得到的行为。请有人能帮助我吗?我的场景如上所述:

JSF/Primefaces:

<p:commandButton value="Ajax Request" action="TX1" ajax="true" />
输出:

  • 500(内部服务器错误)
  • 200(好的)
  • 500(内部服务器错误)
  • 200(好的)
  • 所用技术的版本: primefaces 3.6-SNAPSHOT、SpringWebflow 2.3.1、JSF Mojarra 2.1.7和springframework 3.1.2 感谢您抽出时间

    添加到您的流程中:

        ...
    
        <global-transitions>
            <transition on-exception="java.lang.Exception" to="defaultError"/>
        </global-transitions>
    </flow>
    
    。。。
    
    你试过添加一个吗?我了解到,当你说Spring时,你不能做JSF/PF或其他。这意味着它们永远不会一起工作,因为它们做的是相同的,但方式不同。所以请坚持使用一种技术。
    public void nullPointerException() {
        throw new NullPointerException("null");
    }
    
        ...
    
        <global-transitions>
            <transition on-exception="java.lang.Exception" to="defaultError"/>
        </global-transitions>
    </flow>