【发布时间】:2013-09-20 16:11:21
【问题描述】:
我使用 Spring MVC,Primefaces/JSF 作为查看器,Spring Webflow 作为控制器,我遇到了以下问题:
我正在尝试使用 primefaces 组件 commandButton 发送 AJAX 事件,其中我的流程转换到抛出空指针异常的方法。第一个请求一切正常!响应是 500 HTTP 状态,该方法不执行的第二个请求会导致 200 HTTP 状态响应。所有连续的动作都遵循相同的模式,工作和不工作。更深入地研究代码,我发现在 JsfView.processUserEvent 方法(执行 Jsf 生命周期的地方)中,当一切正常时,指令 facesContext.getRenderResponse() 返回 true,否则返回 false。所以我调查了为什么会发生这种情况,并了解到在 Jsf 生命周期结束时,这个标志设置为 true(好的,面孔告诉渲染响应阶段已经执行)但是当下一个 ajax 请求到达时,这个标志是 true并且JSF Lifecycle 不运行是因为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");
}
输出:
- 500(内部服务器错误)
- 200(正常)
- 500(内部服务器错误)
- 200(正常)
所用技术的版本: primefaces 3.6-SNAPSHOT、spring webflow 2.3.1、JSF Mojarra 2.1.7 和 springframework 3.1.2 感谢您的宝贵时间
【问题讨论】:
-
您是否尝试过添加exception handler?
-
我了解到,当您说 Spring 时,您不能执行 JSF/PF 等。这意味着他们永远不会一起工作,因为他们以不同的方式做同样的事情。所以坚持使用一种技术。
标签: primefaces exception-handling spring-webflow ajax-request