2012-08-02 82 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