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);
}}希望这有助于某人:)
添加回答
举报
