验证失败时保持 p:dialog

Keep p:dialog up when validation failed

我想要的是 window,如果发生验证错误,它会打开以输入有关新用户(名称、密码等)的一些信息,并保持打开状态。我已经尝试过其他帖子中的许多解决方案,但它就是无法保持打开状态。在我单击保存按钮后,它关闭了 window。当我重新打开对话框时,我可以在必填(和无效)字段上看到红色突出显示。我希望你们能帮助我..我正在努力解决这个问题 2 天...

<p:commandButton id="save" value="Save" udate="save" icon="ui-icon-disk"
        ajax="false" validateClient="true"
        action="#{userBean.addUser()}" oncomplete="if (args &amp;&amp; !args.validationFailed) PF('newUser').hide()" />
                        <!-- oncomplete="if (!args.validationFailed &amp;&amp;args.saved) PF('newUser').hide();"  -->
                        <p:commandButton id="cancel" value="Cancel" immidiate="true"
                        oncomplete="PF('newUser').hide()" />

罪魁祸首在这里,在您的保存按钮上:

<p:commandButton ... ajax="false" />

Ajax 在按钮上被禁用。此按钮将不再异步提交表单。此按钮将同步提交表单,这始终意味着刷新整个页面。换句话说,这个按钮的行为与没有 <f:ajax> 的标准 <h:commandButton> 完全一样。老式的 Web 1.0 表单提交。所有 ajax 相关属性,如 oncompleteupdateprocess 等都将被忽略。

从问题中不清楚为什么 ajax 在该按钮上被关闭。如果这只是一个粗心的错误或粗心的复制粘贴的结果,那么只需将其删除,世界就会好起来。

但是,如果您有正当的技术理由关闭它的 ajax(例如,因为在该表单中有一个 <p:fileUpload mode="simple">),那么您需要使用 <p:dialog visible>属性。有了这个,您可以控制是否应在页面加载时显示对话框。

例如

<p:dialog ... visible="#{formName.submitted and facesContext.validationFailed}">
    <h:form binding="#{formName}">

    </h:form>
</p:dialog>

注意:代码是原样。没有额外的 bean 属性。 For sure not on binding!