2012-08-02 23 views
0

J'ai une page avec 2 listes déroulantes qui remplissent un tableau de données (en fonction du choix effectué dans les listes déroulantes). La table de données contient des cases à cocher permettant de sélectionner plusieurs lignes, puis d'ouvrir une boîte de dialogue qui affiche des informations basées sur les lignes sélectionnées. le problème est: la première fois que je clique sur le bouton pour ouvrir le dialogue il est vide, quand je change le contenu des listes déroulantes et ouvre le dialogue, il montrera les informations de la sélection précédente pas celle que je viens de faire et ' Je resterai ainsi jusqu'à ce que je change la liste déroulante et ainsi de suite ... le dialogue montre toujours l'information de la sélection précédente avant de changer le choix fait dans la liste déroulante.Le dialogue PrimeFaces montrant les mauvaises informations

la page:

 <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> 

la Methode 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)); 
    } 

} 

Je dois mentionner que dans la console que je vois les informations d'écriture quand j'ouvre le dialogue, ça ne montre pas d'écriture sur le dialogue. merci pour votre temps et votre aide.

Je mets à jour ce post pour dire que je finaly résolu le Probleme de remplir la fenêtre i mettre le dialogue dans une nouvelle forme comme ceci:

 </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> 

j'ai maintenant un peu Probleme: le commandButton en le dialogue ne se déclenche pas Methode, sauf que je l'ai essayé

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

et

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

et

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

mais rien :(. où est allé mal?

Répondre

-1

Selon la documentation de <p:ajax>, listener est déclenchée uniquement sur requête partielle que je ne vois pas se produire dans le code que vous avez collé. Utilisez event="valueChange" pour déclencher une requête partielle qui entraînerait l'affichage de la mise à jour en cours dans la boîte de dialogue.

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

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

mais il n'y a pas d'attribut de mise à jour dans p: selectOneMenu et leur pour je ne peux pas remplir la deuxième liste déroulante! – nouraty

+0

J'ai le problème maintenant. Mise à jour de la réponse – Arjun

+0

:(ce n'est pas ça non plus, je reçois toujours le datatable pour montrer les lignes mais le popup est un pas en arrière! – nouraty

Questions connexes