2017-09-30 3 views
0

Ich habe ein Element selectOneMenu innerhalb Element selectManyMenu (Komponentennamen wurden geändert).p: selectOneMenu in selectManyMenu Problem

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

Sie werden normalerweise angezeigt, aber wenn ich den Wert der selectOneMenu in einer Zeile ändern, ändert es in allen. Was mache ich falsch?

example

+0

_Was mache ich falsch? _ Sie versuchen, Komponenten so zu verschachteln, dass sie nie als Anwendungsfall gedacht waren. So wird es höchstwahrscheinlich gerade nicht unterstützt – Kukeltje

+0

Lösung für mich: Verwenden Sie p: dataTable anstelle von p: selectManyMenu. In diesem Fall wirkt alles wie ein Zauber –

Antwort

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 gespeichert meine Zeit. Um darüber hinausSubItemChange aufzurufen, müssen Sie remoteCommand verwenden. Hoffe das hilft jemandem.

Verwandte Themen