所有对话框都会更新辅助bean

时间:2014-09-04 09:55:16

标签: spring jsf primefaces dialog

我在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更新为我想要的值,但之后第二个对话框也会将其更新为其值,导致第一个下载错误的文件。如果我删除第二个对话框,第一个对话框将正常运行。

如何停止更新值的第二个对话框?

1 个答案:

答案 0 :(得分:2)

我猜你将这两个对话框保存在一个h:form组件中 然后显然在一个对话框中提交将在两个对话框中提交字段,它们是相同的形式。

  • 请勿将p:dialog保留在h:form内,而应使用h:form 对话。
  • 您可以在页面中使用多个h:form,但不会造成任何伤害 但是,不应该在另一个中使用一个h:form
  • 根据您的设计和功能确定可以使用的表单数量。在您的情况下,您可以在两个对话框中使用每个h:forms