我想要的是,如果发生验证错误,打开以输入关于新用户(名称,密码,...)的某些信息的窗口将保持打开状态。我已经尝试过其他帖子的许多解决方案,但它并没有保持开放。单击保存按钮后,它会关闭窗口。当我重新打开对话框时,我可以在所需(和无效)字段上看到红色突出显示。我希望你们能帮助我..我试图解决这个问题2天......
<p:commandButton id="save" value="Save" udate="save" icon="ui-icon-disk"
ajax="false" validateClient="true"
action="#{userBean.addUser()}" oncomplete="if (args && !args.validationFailed) PF('newUser').hide()" />
<!-- oncomplete="if (!args.validationFailed &&args.saved) PF('newUser').hide();" -->
<p:commandButton id="cancel" value="Cancel" immidiate="true"
oncomplete="PF('newUser').hide()" />
答案 0 :(得分:2)
罪魁祸首就在这里,在你的保存按钮上:
<p:commandButton ... ajax="false" />
按钮上禁用了Ajax。此按钮不再异步提交表单。此按钮将同步提交表单,这总是意味着整页刷新。换句话说,此按钮的行为与没有<h:commandButton>
的标准<f:ajax>
完全相同。一个老式的Web 1.0表单提交。与oncomplete
,update
,process
等所有与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
!