2017-09-30 43 views
0

我有一个元素selectOneMenu内部元素selectManyMenu(组件名称已被更改)。p:selectOneMenu里面selectManyMenu故障

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

它们显示正常,但是当我在一行中更改selectOneMenu的值时,它会全部改变。我究竟做错了什么?

example

+0

_我在做什么错?_你试图以一种永远不会成为用例的方式嵌套组件。所以它很可能只是不支持 – Kukeltje

+0

解决方案:使用p:dataTable代替p:selectManyMenu。在这种情况下,所有的作品都像魅力 –

回答

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救了我的时间。另外,要从它调用SubItemChange,需要使用remoteCommand。希望这有助于某人。