我使用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");
}
输出:
使用过的技术版本: primefaces 3.6-SNAPSHOT,spring webflow 2.3.1,JSF Mojarra 2.1.7和springframework 3.1.2 谢谢你的时间
答案 0 :(得分:0)
将global transitions添加到您的流程中:
...
<global-transitions>
<transition on-exception="java.lang.Exception" to="defaultError"/>
</global-transitions>
</flow>