3 回答
TA贡献2011条经验 获得超2个赞
在onsuccess
运行,如果AJAX请求本身是成功的(即有没有网络故障,未捕获的异常等),如果不采取行动方法成功地调用。
给定一个<p:dialog widgetVar="testDialog">
你可以删除onsuccess
和替换PrimeFaces它RequestContext#execute()
里面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错误,从而引起新的JS错误,当你设法得到它可能是不存在的validationFailed
,从它; 的&
,而不是&
强制性的理由解释这个答案,如果有必要,你调用像JS功能,重构oncomplete="hideDialogOnSuccess(args, testDialog)"
如图保持<P:对话框>打开时验证失败。
后一种解决方案(稍加重写)应该适用于普通的jsf h:commandButton
和一个f:ajax
令人遗憾的是,PrimeFaces不支持RichFaces已经支持的内容:EL on*
属性的请求时重新评估。否则你也可以做到这一点:
<p:commandButton ... oncomplete="if (#{not facesContext.validationFailed}) PF('testDialog').hide()" />
TA贡献1895条经验 获得超7个赞
我刚刚用谷歌搜索了这个解决方案。基本上我的想法是使用actionListener而不是按钮的动作,并在支持bean中添加回调参数,然后检查按钮的oncomplete方法。示例部分代码:
JSF第一:
<p:commandButton actionListener="#{myBean.doAction}" oncomplete="if (!args.validationFailed && args.saved) schedulesDialog.hide();" />
支持豆:
public void doAction(ActionEvent actionEvent) { // do your stuff here... if (ok) { RequestContext.getCurrentInstance().addCallbackParam("saved", true); } else { RequestContext.getCurrentInstance().addCallbackParam("saved", false); }}
希望这有助于某人:)
添加回答
举报