Adr*_*vma 13 validation jsf dialog primefaces
我有一个包含2个必填输入字段的表单和一个显示对话框的命令按钮:
<p:commandButton id="showDialogButton" value="Enregistrer"
action="#{DEQbean.Ajouter()}" update="@form"
oncomplete="dialogaboutDEQ.show()" />
<p:dialog id="reamrquesDEQ" widgetVar="dialogaboutDEQ" header="Informations"
width="400" closable="false" resizable="false" showEffect="clip"
hideEffect="clip" modal="true" appendToBody="true">
<p:messages id="messages" showDetail="true" autoUpdate="true"/>
<p:commandButton value="OK" action="DEQlist" />
</p:dialog>
Run Code Online (Sandbox Code Playgroud)
我想仅在验证通过并执行action方法时才显示对话框.但是,当所需的输入字段为空并且因此未执行操作方法时,仍会显示该对话框.
如何在完成成功的表单提交后才显示对话框?
Bal*_*usC 23
PrimeFaces ajax响应将一个args对象放在具有属性的JS作用域中validationFailed.你可以检查一下oncomplete.
<p:commandButton ... oncomplete="if (args && !args.validationFailed) dialogaboutDEQ.show()" />
Run Code Online (Sandbox Code Playgroud)
如果您在操作方法而不是在普通验证器中执行验证,并且您无法返工,那么您需要手动调用FacesContext#validationFailed().
另一种选择是使用RequestContext#execute()内部操作方法以编程方式指示PrimeFaces执行给定的JS代码段.因此,oncomplete您可以在操作方法中执行此操作,而不是:
RequestContext.getCurrentInstance().execute("dialogaboutDEQ.show()");
Run Code Online (Sandbox Code Playgroud)
如果验证失败,则不调用action方法,然后也不会执行此操作.
同样,另一种选择是使用对话框的visible属性.您的命令按钮显然正在更新整个表单,包括对话框(即使对话框已经严重声明,appendToBody="true"这将导致它不再在父表单中;即它必须具有appendToBody="false"或拥有自己的表单,但是ala) .您可以检查例如是否FacesContext#isPostback()以及FacesContext#isValidationFailed()是否执行了成功的回发:
<p:dialog ... visible="#{facesContext.postback and not facesContext.validationFailed}">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18286 次 |
| 最近记录: |