ajax – 保持p:在提交后出现验证错误时打开对话框

前端之家收集整理的这篇文章主要介绍了ajax – 保持p:在提交后出现验证错误时打开对话框前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最小示例对话框:
<p:dialog header="Test Dialog"  
          widgetVar="testDialog"> 
  <h:form> 
    <p:inputText value="#{mbean.someValue}"/> 

    <p:commandButton value="Save" 
                     onsuccess="testDialog.hide()" 
                     actionListener="#{mbean.saveMethod}"/> 
  </h:form>       
</p:dialog>

我想要能够做的是有mbean.saveMethod以某种方式阻止对话框关闭,如果有一些问题,只通过growl输出消息。这是一个验证器不会帮助的情况,因为没有办法告诉someValue是否有效,直到保存提交到后端服务器。目前,我使用visible属性并将其指向mbean中的布尔字段。这工作,但它使用户界面更慢,因为弹出向上或向下的对话框需要击中服务器。

如果ajax请求本身成功(即没有网络错误,未捕获异常等),而不是如果action方法被成功调用,则onsuccess运行。

给定< 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对象,它有一个boolean validationFailed属性

<p:commandButton ...
    oncomplete="if (args &amp;&amp; !args.validationFailed) PF('testDialog').hide()" />

if(args)检查是必要的,因为当发生ajax错误时,它可能不存在,因此当您尝试从其中获取validationFailed时会导致新的JS错误; ;而不是&是必须的在this answer解释的原因,重构如果必要的一个JS函数,你调用像oncomplete =“hideDialogonSuccess(args,testDialog)”。

不幸的是,PrimeFaces不支持RichFaces已经支持的:请求时间重新评估on *属性中的EL。你也可以这样做:

<p:commandButton ...
    oncomplete="if (#{not facesContext.validationFailed}) PF('testDialog').hide()" />

猜你在找的Ajax相关文章