2017-09-30 3 views
0

J'ai un élément selectOneMenu dans l'élément selectManyMenu (les noms des composants ont été modifiés).p: selectOneMenu dans selectManyMenu trouble

<p:selectManyMenu id="#{id}MyItemsList" converter="#{backend.myItemsConverter}" 
         value="#{backend.selectedItem}" 
         rendered="#{backend ne null}" var="item"> 
     <f:selectItems value="#{backend.getMyItems()}" 
         var="varItems" 
         itemLabel="#{varItems.name}" itemValue="#{varItems.id}"/> 
     <p:column> 
      <h:outputText value="#{item.name}" title="#{item.title}"/> 
     </p:column> 
     <p:column> 
      <p:selectOneMenu value="#{item.subId}" converter="#{backend.subItemsConverter}"> 
       <p:ajax listener="#{backend.onSubItemClick}"/> 
       <f:selectItems value="#{backend.subItems}" var="varSubItems" 
           itemLabel="#{varSubItems.name}" 
           itemValue="#{varSubItems.id}"/> 
      </p:selectOneMenu> 
     </p:column> 
    </p:selectManyMenu> 

Ils sont affichés normalement, mais quand je change la valeur de la selectOneMenu en une ligne, ça change tout. Qu'est-ce que je fais mal?

example

+0

_Qu'est-ce que je fais de mal? _ Vous essayez d'imbriquer des composants d'une manière qui n'a jamais été destinée à être utilisée. Donc, il est probablement pas pris en charge – Kukeltje

+0

Solution pour moi: utilisez p: dataTable au lieu de p: selectManyMenu. Dans ce cas, tout fonctionne comme un charme –

Répondre

0
<p:remoteCommand name="subItemChange" action="#{backend.onSubItemChange}" 
        process="@this" 
        update="@form:ButtonsPanel"/> 
    <p:dataTable id="#{id}MyItemsListReadOnly" converter="#{backend.myItemsConverter}" 
       value="#{backend.selectedItem}" 
       rendered="#{backend ne null}" var="item"> 
     <p:column style="width: 50%"> 
      <h:outputText value="#{item.name}" title="#{item.title}"/> 
     </p:column> 
     <p:column style="width: 50%"> 
      <p:selectOneMenu value="#{item.subId}" converter="#{backend.subItemsConverter}" 
          onchange="subItemChange();" > 
       <f:selectItems value="#{backend.subItems}" var="varSubItems" 
          itemLabel="#{varSubItems.name}" 
          itemValue="#{varSubItems.id}"/> 
      </p:selectOneMenu> 
     </p:column> 
    </p:dataTable> 

dataTable sauvé mon temps. De plus, pour appeler onSubItemChange, il faut utiliser remoteCommand. J'espère que cela aide quelqu'un.