我在xhtml页面上有两个对话框:
<p:dialog width="400" id="dialog1" header="Download" widgetVar="dialog1">
<h:outputText value="Field1"/>
<h:inputText value="#{backingBean.field1}"/>
<br/>
<h:outputText value="Field2"/>
<h:inputText value="#{backingBean.field2}"/>
<br/>
<p:commandButton value="Download" ajax="false" onsuccess="PF('diaglog1').hide();">
<p:fileDownload value="#{backingBean.file}"/>
</p:commandButton>
</p:dialog>
<p:dialog width="400" id="dialog2" header="Send" widgetVar="dialog2">
<h:outputText value="Field1"/>
<p:inputText value="#{backingBean.field1}"/>
<br/>
<h:outputText value="Field2"/>
<h:inputText value="#{backingBean.field2}">
<p:ajax update="somePanel"/>
</h:inputText>
<br/>
<h:outputText value="Recipient"/>
<h:panelGroup id="somePanel">
<p:selectOneMenu style="width: 100%;" var="recipient">
<f:selectItems value="#{backingBean.someList}"/>
</p:selectOneMenu>
</h:panelGroup>
<br/>
<p:commandButton value="Send" actionListener="#{backingBean.sendSomething}" onsuccess="PF('dialog2').hide();">
<f:attribute name="item" value="#{recipient}"/>
</p:commandButton>
</p:dialog>
它们具有不同的功能,但位于同一页面上并使用相同的辅助bean。一次只能显示一个对话框。问题是当我在第一个对话框中输入一些值并按“下载”时,它会将支持bean的field1和field2更新为我想要的值,但之后第二个对话框也会将其更新为其值,导致第一个下载错误的文件。如果我删除第二个对话框,第一个对话框将正常运行。
如何停止更新值的第二个对话框?
答案 0 :(得分:2)
我猜你将这两个对话框保存在一个h:form
组件中
然后显然在一个对话框中提交将在两个对话框中提交字段,它们是相同的形式。
p:dialog
保留在h:form
内,而应使用h:form
对话。 h:form
,但不会造成任何伤害
但是,不应该在另一个中使用一个h:form
。 h:forms
。