我在p:dialog通过AJAX提交的组件中有一个表单.对话框中的表单是通过ui:include另一个.xhtml只包含表单及其组件的表单(不,我不是嵌套表单;对话框本身不是任何形式).包含页面的支持bean是'ViewScoped'.
MOST的功能很好:
当被action调用p:commandButton失败时,问题就出现了.如果失败,对话框保持打开状态,并向用户显示"保存更改错误" h:messages; 此外,提交的值仍然存在于输入字段中.当表单保持打开时,这很好(甚至是期望的) - 但是在关闭对话框并重新打开它时,提交的值仍然在文本字段中.这很糟糕,因为它给用户留下了保存成功的印象(h:messages由于对话框更新,组件现在是空白的).
到目前为止,我已经尝试了以下内容,其中没有一个已经解决了这个问题:
p:commandButton"取消"按钮,其中包含一个p:resetInput组件以关闭对话框/重置表单.(对话框关闭,但表单中提交的值仍然存在).p:commandButton,删除RequestMap包含表单的辅助bean.immediate=true和immediate=false.process=@this,我用来关闭表单的类似策略,以确保它在重新打开时会有新的字段.您可以考虑将支持bean设置为新实例,并重新填充地址对象,我会看到一个新的形式,但是NOPE.
以下是一些来源:
mainform.xhtml的部分
<p:dialog id="dlgAddress"
header="Address Edit"
widgetVar="dialogAddress"
dynamic="true"
modal="false"
closable="false"
resizable="false"
styleClass="dlgAddress"
visible="#{addressform.showDlgAddress}">
<ui:include src="addressform.xhtml"/>
</p:dialog>
Run Code Online (Sandbox Code Playgroud)
addressform.xhtml
<h:form id="fDlgAddress">
<div id="addresses-container">
<h:messages id="msgDlgAddress" errorClass="errormsg" infoClass="infomsg1" layout="table"/>
<h:panelGrid columns="1"
styleClass="pgAddresses"
rendered="#{!addressform.address.exists}">
<h:outputText value="No active #{addressform.address.atypCode} …Run Code Online (Sandbox Code Playgroud)