0

我使用Spring MVC与Primefaces/JSF作为观众与春天的Webflow作为控制器,我有以下问题:处理业务异常请求

我试图与发送AJAX事件primefaces组件commandButton,其中我的流程正在转换到抛出空指针异常的方法。第一个请求一切正常!响应是500 HTTP状态,该方法不会执行的第二个请求会导致200 HTTP状态响应。所有连续的操作都遵循相同的模式,工作并且不起作用。进一步深入了解代码,我发现在JsfView.processUserEvent(执行Jsf生命周期的方法)中,指令facesContext.getRenderResponse()在所有内容都工作时返回true,否则返回false。所以我调查了为什么发生这种情况,并了解到在Jsf生命周期结束时这个标志被设置为true(好的,这些面孔告诉渲染响应阶段已经执行),但是当下一个Ajax请求到达时,这个标志是真实的并且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)

我们的版本ED技术: primefaces 3.6快照,春天的Webflow 2.3.1,JSF钻嘴鱼科2.1.7和3.1.2 springframework的 谢谢您的时间

+0

你试过添加一个[异常处理程序](http://ovaraksin.blogspot.com/2010/10/global-handling-of-all-unchecked.html)? – patstuart

回答

0

添加global transitions到您的流程:

... 

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