2014-09-04 39 views
0

我有一个XHTML页面上2个对话框:所有对话框更新支持bean

<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

建议退后一步学习基本的HTML,然后再深入到JSF中。 – BalusC 2014-09-04 10:58:13

+0

谢谢。会做。 – 2014-09-04 12:49:08

回答

2

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

  • 不要让p:dialog一个h:form里面,而是使用h:form 对话框内。
  • 您可以在一个页面中使用多个h:form s,在 中没有伤害,但在另一个页面中不应该使用一个h:form
  • 根据您的设计和功能决定您可以使用多少表单。在您的情况下,您可以在两个对话框中使用每个对话框的2 h:forms