提交后发生验证错误时,保持p:对话框打开

提交后发生验证错误时,保持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中的布尔字段。这有效,但它使用户界面变慢,因为弹出或关闭对话框需要命中服务器。


临摹微笑
浏览 536回答 3
3回答

森林海

在onsuccess运行,如果AJAX请求本身是成功的(即有没有网络故障,未捕获的异常等),如果不采取行动方法成功地调用。给定一个<p:dialog widgetVar="testDialog">你可以删除onsuccess和替换PrimeFaces它RequestContext#execute()里面saveMethod():if&nbsp;(success)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;RequestContext.getCurrentInstance().execute("PF('testDialog').hide()");}注意:PF()在PrimeFaces 4.0中引入。在较旧的PrimeFaces版本中,您需要testDialog.hide()使用它。如果您不希望控制器与特定于视图的脚本混乱,您可以使用oncomplete而不是提供args具有布尔validationFailed属性的对象:<p:commandButton&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;oncomplete="if&nbsp;(args&nbsp;&amp;&amp;&nbsp;!args.validationFailed)&nbsp;PF('testDialog').hide()"&nbsp;/>该if (args)检查是必要的,因为当发生Ajax错误,从而引起新的JS错误,当你设法得到它可能是不存在的validationFailed,从它;&nbsp;的&amp;,而不是&强制性的理由解释这个答案,如果有必要,你调用像JS功能,重构oncomplete="hideDialogOnSuccess(args, testDialog)"如图保持<P:对话框>打开时验证失败。后一种解决方案(稍加重写)应该适用于普通的jsf&nbsp;h:commandButton和一个f:ajax令人遗憾的是,PrimeFaces不支持RichFaces已经支持的内容:EL&nbsp;on*属性的请求时重新评估。否则你也可以做到这一点:<p:commandButton&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;oncomplete="if&nbsp;(#{not&nbsp;facesContext.validationFailed})&nbsp;PF('testDialog').hide()"&nbsp;/>

人到中年有点甜

我刚刚用谷歌搜索了这个解决方案。基本上我的想法是使用actionListener而不是按钮的动作,并在支持bean中添加回调参数,然后检查按钮的oncomplete方法。示例部分代码:JSF第一:<p:commandButton&nbsp;actionListener="#{myBean.doAction}" &nbsp;&nbsp;&nbsp;oncomplete="if&nbsp;(!args.validationFailed&nbsp;&amp;&amp;&nbsp;args.saved)&nbsp;schedulesDialog.hide();"&nbsp;/>支持豆:public&nbsp;void&nbsp;doAction(ActionEvent&nbsp;actionEvent)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;do&nbsp;your&nbsp;stuff&nbsp;here... &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ok)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RequestContext.getCurrentInstance().addCallbackParam("saved",&nbsp;true); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RequestContext.getCurrentInstance().addCallbackParam("saved",&nbsp;false); &nbsp;&nbsp;&nbsp;&nbsp;}}希望这有助于某人:)
打开App,查看更多内容
随时随地看视频慕课网APP