2012-08-02 76 views
0

我有一个页面有2个下拉列表填充数据表(取决于在下拉列表中做出的选择)。数据表包含用于选择多行的复选框,然后打开一个基于所选行显示信息的对话框。问题是:第一次点击按钮打开对话框是空的,当我改变下拉列表的内容并打开对话框时,它会显示之前选择的信息,而不是我刚才做的那个,我会保持这种方式,直到我改变下拉列表,等等......对话总是显示之前选择的信息,然后再更改下拉列表中的选择。PrimeFaces对话框显示错误的信息

页:

 <h:form id="form"> 
    <f:view> 

    <p:growl id="msgs" showDetail="true" /> 
    <p:layout style="min-width:300px;min-height:200px;" id="layout"> 
     <p:layoutUnit position="west" resizable="true" size="200" minSize="40" maxSize="300"> 
     <!-- _______________________________________start drop down________________________________________________________ --> 
      <h:panelGrid columns="1" cellpadding="5"> 

       <p:selectOneMenu id="Item" value="#{ThemeBean.idItem}"> 
        <f:selectItem itemLabel="Select un Item " itemValue="" /> 
        <f:selectItems value="#{ItemBean.listItemsUser}" var="utilisateur" /> 
        <p:ajax listener="#{ThemeBean.handleCityChange}" update="suburbs" /> 
       </p:selectOneMenu> 

       <p:selectOneMenu id="suburbs" value="#{ReponseBean.idTheme}"> 
        <f:selectItem itemLabel="Select un Theme" itemValue="" /> 
        <f:selectItems value="#{ThemeBean.suburbs}" /> 
        <p:ajax listener="#{ReponseBean.handleCityChange_Ecart}" update=":form:dropArea" /> 
       </p:selectOneMenu> 

      </h:panelGrid> 
      <p:separator /> 
     </p:layoutUnit> 
    <!-- _______________________________________end drop down________________________________________________________ --> 
     <p:layoutUnit position="center"> 

      <p:outputPanel id="dropArea"> 
       <p:dataTable id="dt1" var="car" 
        value="#{ReponseBean.listPartheme_ecart}" 
        rendered="#{not empty ReponseBean.listPartheme_ecart}" 
        rowKey="#{car.id}" editable="true" 
        selection="#{EcartBean.selectedCars}"> 

        <p:column selectionMode="multiple" style="width:18px" /> 
        <p:column headerText="Questions"> 
         <h:outputText value="#{car.q1.text}" /> 
        </p:column> 

        <p:column headerText="Reponse"> 
         <h:outputText value="#{car.rep}" /> 
        </p:column> 
        <f:facet name="footer"> 
         <p:commandButton id="multiViewButton" value="Ajouter Ecart" icon="ui-icon-search" 
          update=":form:multiDialog :form:displayMulti" oncomplete="multiCarDialog.show()"/> 
        </f:facet> 
       </p:dataTable> 
       <!-- ________________________________________dialogue________________________________________________ --> 
       <p:dialog id="multiDialog" header="Ajout Ecart" widgetVar="multiCarDialog" height="300" showEffect="fade"> 
        <p:dataList id="displayMulti" value="#{EcartBean.selectedCars}" var="selectedCare"> 
         #{selectedCare.q1.text} (#{selectedCare.rep}) 
        </p:dataList> 
        <p:messages /> 
        <h:panelGrid columns="3" cellpadding="5"> 

         <h:outputLabel value="Niveau Ecart" /> 

         <p:selectOneMenu id="idUtilisateur" value="#{EcartBean.idNiveauAudit}"> 
          <f:selectItems value="#{NiveauEcartBean.listNiveauSelect}" var="nivecart" /> 
         </p:selectOneMenu> 
         <p:message for="idUtilisateur" /> 
         <h:outputLabel value="Constatation" id="Constatation" /> 
         <h:inputText value="#{EcartBean.consta}" /> 
         <p:message for="Constatation" /> 
         <p:commandButton icon="ui-icon-disk" value="Ajouter" id="ViewButton" action="#{EcartBean.save}" 
          oncomplete="multiCarDialog.hide();"> 
         </p:commandButton> 
        </h:panelGrid> 

       </p:dialog> 

      </p:outputPanel> 

     </p:layoutUnit> 
    </p:layout> 

    </f:view> 
    </h:form> 

的梅索德ThemeBean.handleCityChange:

public void handleCityChange() { 

    qu = respQue.lister_Ques(idItem); 

    if (qu != null) { 
     List<SelectItem> listuti = new ArrayList<SelectItem>(); 
     List<Theme> list = resp.lister_Par_Thme(qu.getId()); 
     for (Theme p : list) { 
      listuti.add(new SelectItem(p.getId(), p.getLibelle())); 
     } 
     this.setSuburbs(listuti); 

    } else { 
     System.out.println("erreur"); 
    } 

} 

ReponseBean.handleCityChange_Ecart:

public void handleCityChange_Ecart() { 

    listPartheme_ecart= new ArrayList<Reponse>(); 
    System.out.println("taiile avant "+listPartheme_ecart.size()); 
    List<Reponse> lr = respQ.findByTheme_ecart(idTheme); 
    System.out.println(idTheme); 
    for (int i = 0; i < lr.size(); i++) { 
     if (lr.get(i).getAudit().getId() == aud.getId()) 
      listPartheme_ecart.add(lr.get(i)); 
    } 

} 

我要指出,在控制台中,我看到写信息当我打开对话时,它并没有表现出对话的写作。 感谢您的时间和帮助。

我更新这个帖子说,我finaly解决填充弹出 的probleme我把对话以新的形式是这样的:

 </h:form> 
    <!-- ________________________________________dialogue________________________________________________ --> 
    <h:form id="hh" > 
    <p:dialog id="multiDialog" header="Ajout Ecart" widgetVar="multiCarDialog" height="300" showEffect="fade"> 

     <p:dataList id="displayMulti" value="#{EcartBean.selectedCars}" var="selectedCare"> 
      #{selectedCare.q1.text} (#{selectedCare.rep}) 
     </p:dataList> 
     <p:messages /> 

      <h:panelGrid columns="3" cellpadding="5"> 

       <h:outputLabel value="Niveau Ecart" /> 
       <p:selectOneMenu id="idUtilisateur" value="#{EcartBean.idNiveauAudit}"> 
        <f:selectItems value="#{NiveauEcartBean.listNiveauSelect}" var="nivecart" /> 
       </p:selectOneMenu> 

       <p:message for="idUtilisateur" /> 
       <h:outputLabel value="Constatation" id="Constatation" /> 

       <h:inputText value="#{EcartBean.consta}" /> 
       <p:message for="Constatation" /> 

       <p:commandButton icon="ui-icon-disk" value="Ajouter" action="#{EcartBean.save}" id="ViewButton" oncomplete="multiCarDialog.hide();" /> 

      </h:panelGrid> 

     </p:dialog> 
    </h:form> 

我现在有一个小probleme:命令按钮中对话不火的梅索德保存我曾尝试

<p:commandButton icon="ui-icon-disk" value="Ajouter" action="#{EcartBean.save}" id="ViewButton" oncomplete="multiCarDialog.hide();" /> 

<p:commandButton icon="ui-icon-disk" value="Ajouter" actionListener="#{EcartBean.save}" id="ViewButton" oncomplete="multiCarDialog.hide();" /> 

<p:commandButton icon="ui-icon-disk" value="Ajouter" id="ViewButton" oncomplete="multiCarDialog.hide();" > 
       <f:actionListener binding="#{EcartBean.save}"/> 
       </p:commandButton> 

但没有:(。哪里出错了?

回答

-1

根据<p:ajax>的文档,listener仅在部分请求中触发,我在您粘贴的代码中看不到发生。使用event="valueChange"来触发部分请求,这会导致当前更新在对话框中显示。

<p:ajax event="valueChange" listener="#{ThemeBean.handleCityChange}" update="suburbs" /> 

<p:ajax event="valueChange" listener="#{ReponseBean.handleCityChange_Ecart}" update=":form:dropArea" /> 
+0

但他们没有更新attribut在p:selectOneMenu和他们的我不能填补第二个下拉! – nouraty 2012-08-02 13:35:16

+0

我现在遇到问题。更新答案 – Arjun 2012-08-02 14:03:04

+0

:(这不是那个,我仍然得到数据表来显示行,但弹出是一步落后! – nouraty 2012-08-03 07:50:39