处理Primefaces Ajax请求中的业务异常

时间:2013-09-16 13:27:00

标签: primefaces exception-handling spring-webflow ajax-request

我使用Spring MVC和Primefaces / JSF作为VIEWER和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" />

流速:

<transition on="TX1">
    <evaluate expression="testPopupMB.nullPointerException()"/> 
</transition>

商务舱:

public void nullPointerException() {
    throw new NullPointerException("null");
}

输出:

  1. 500(内部服务器错误)
  2. 200(OK)
  3. 500(内部服务器错误)
  4. 200(OK)
  5. 使用过的技术版本: primefaces 3.6-SNAPSHOT,spring webflow 2.3.1,JSF Mojarra 2.1.7和springframework 3.1.2 谢谢你的时间

1 个答案:

答案 0 :(得分:0)

global transitions添加到您的流程中:

    ...

    <global-transitions>
        <transition on-exception="java.lang.Exception" to="defaultError"/>
    </global-transitions>
</flow>
相关问题