如何仅在完成成功的表单提交时显示对话框

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 &amp;&amp; !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 次

最近记录:

9 年,9 月 前