2012-08-02 4 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)); 
    } 

} 

나는 내가 쓰기 정보를 볼 수 콘솔에서 것을 언급해야한다 대화를 열면 대화 상자에 쓰기가 표시되지 않습니다. 시간과 도움에 감사드립니다. 해당 명령에 : 지금 하나의 작은 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

하지만 p : selectOneMenu에서 업데이트 속성이 없으므로 두 번째 드롭 다운을 채울 수 없습니다. – nouraty

+0

지금 문제가 발생합니다. 대답 – Arjun

+0

업데이트 : (그 중 하나가 아니에요, 나는 여전히 데이터 테이블을 표시하지만 팝업은 한 걸음 뒤로입니다! – nouraty

관련 문제