验证失败时保持p:对话框

时间:2015-01-11 15:32:00

标签: validation jsf jsf-2 primefaces

我想要的是,如果发生验证错误,打开以输入关于新用户(名称,密码,...)的某些信息的窗口将保持打开状态。我已经尝试过其他帖子的许多解决方案,但它并没有保持开放。单击保存按钮后,它会关闭窗口。当我重新打开对话框时,我可以在所需(和无效)字段上看到红色突出显示。我希望你们能帮助我..我试图解决这个问题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()" />

1 个答案:

答案 0 :(得分:2)

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

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

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

从问题中为什么在该按钮上关闭了ajax是不明确的。如果这只是一个无意义的错误或一个不太谨慎的复制品的结果,那么只需删除它,世界应该很好。

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

E.g。

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

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

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