【发布时间】:2012-07-03 19:38:15
【问题描述】:
我正在使用 Omnifaces FullAjaxExceptionHandler - 它工作得很好,但是当我进行 ajax 调用并有一个 onevent 函数检查状态 == 'success' 它仍然被调用,即使 FullAjaxExceptionHandler 已经呈现错误页面。 (我在 glassfish 3.1.1 上使用 JSF(Mojarra 2.1.3)
JSF 代码:
<h:commandButton value="myButton">
<f:ajax listener="#{myBean.myBeanFunction()}"
render="someDiv"
onevent="myFunction"/>
</h:commandButton>
Javascript 代码:
function myFunction(e)
{
if (e.status == 'success') {
alert("Success");
}
}
因此,如果 FullAjaxExceptionHandler 将我带到错误页面,我需要一些不执行 javascript 函数的方法。
【问题讨论】:
-
在设计上不可能更改 ajax 响应状态,错误状态会导致响应数据被忽略(因此最终用户不会得到任何反馈)。您需要挂钩“成功”状态的功能需求到底是什么?它究竟是如何以这种方式失败的?或许可以用不同的方式解决。
-
我需要在ajax调用成功完成时显示一个对话框,但是当调用过程中出现错误时,它会呈现错误页面,但仍然会尝试显示对话框。对话框实际上并没有显示,但对话框是模态的,因此错误页面以模态背景结束,您无法单击页面上的任何内容。如果 FullAjaxExceptionHandler 呈现错误页面,有什么方法可以不执行 onevent javascript?或者有没有办法在 onevent javascript 函数中放置一些可以检查的数据,这样我就不会尝试显示对话框?
-
我刚刚发现,如果您使用 primefaces p:commandButton,或者如果您使用 p:ajax,它可以正常工作。不知道为什么使用 f:ajax 时它的工作方式不同。