在
onsuccess运行,如果AJAX请求本身是成功的(即有没有网络故障,未捕获的异常等),如果不采取行动方法成功地调用。
给定一个
<p:dialogwidgetVar="testDialog">,您可以删除
onsuccess并将其替换为
RequestContext#execute()内部的PrimeFaces
saveMethod():
if (success) { RequestContext.getCurrentInstance().execute("PF('testDialog').hide()");}注意:
PF()在PrimeFaces 4.0中引入。在较旧的PrimeFaces版本中,您需要
testDialog.hide()使用。
如果您不想使用特定于视图的脚本使控制器混乱,则可以改用
oncomplete提供
args具有布尔
validationFailed属性的对象:
<p:commandButton ... oncomplete="if (args && !args.validationFailed) PF('testDialog').hide()" />该
if(args)检查是必要的,因为发生ajax错误时可能不存在该检查,因此在尝试获取
validationFailed该错误时会导致新的JS错误。出于此答案中所述的原因,
&而不是必选,如果需要,可以重构为调用的JS函数,如验证失败时保持
<p:dialog>打开中所示。
&
如果然而,没有验证错误和操作方法被成功触发,而你仍想保留,比如,因为异常的服务方法调用的对话框打开,这时你可以手动触发
validationFailed以
true通过明确从内支持bean的操作方法调用
FacesContext#validationFailed()。例如
FacesContext.getCurrentInstance().validationFailed();



