2012-11-01 89 views
0

我正在使用Primefaces 3.4和Groovy。我創建的對象PartAttachmentPrimefaces:從嵌套的DataTable中選擇行

class Part { 
    Attachment selectedAttachment 
    List<Attachment> attachments = [] 

    AttachmentDataModel getAttachmentModel() { 
     return new AttachmentDataModel(attachments) 
    } 
} 

class Attachment { 
    String fileName 
    String fileType 
    String description 
} 

我的觀點有嵌套數據表,像這樣:

<p:dataTable value="#{mybean.parts}" var="part" rendered="#{mybean.attachmentsFound}"> 
    <p:column> 
     <p:dataTable 
      var="attachment" 
      selectionMode="single" 
      value="#{part.attachmentModel}" 
      selection="#{part.selectedAttachment}" 
      > 
      <p:column headerText="File Name"> 
       #{attachment.fileName} 
      </p:column> 
      <p:column headerText="File Description" style="width: 200px"> 
       #{attachment.description} 
      </p:column> 
      <p:column headerText="File Type" style="width: 20px"> 
       #{attachment.fileType} 
      </p:column> 
     </p:dataTable> 
    </p:column> 
</p:dataTable> 

我希望能夠選擇每部分一個附件。

問題:只有第一部分的selectedAttachment被設置爲最後選出的附件!

問題:如何啓用每個零件實例來保存其選定的附件?謝謝你的時間。

注意:如果我調試我的AttachmentDataModel,我會看到getRowData命中儘可能多的選擇。

+0

我們應該瞭解您的'AttachmentDataModel'類嗎?也許你想指向嵌套dataTable中的'attachments'列表? –

+0

如果我使用「rowKey」方法並將內部DataTable的值更改爲'#{part.attachments}',仍會發生同樣的問題 – Pakman

回答

1

我仍在尋找答案,但我找到了解決方法。我改變了我的看法到:

<p:dataTable value="#{mybean.parts}" var="part" rendered="#{mybean.attachmentsFound}"> 
    <p:column> 
     <p:dataTable 
      var="attachment" 
      selectionMode="single" 
      value="#{part.attachmentModel}" 
      selection="#{part.selectedAttachment}" 
      > 
      <!-- WORKAROUND --> 
      <p:ajax event="rowSelect" listener="#{mybean.onRowSelect}" /> 
      <p:ajax event="rowUnselect" listener="#{mybean.onRowUnselect}" /> 
      <!-- /WORKAROUND --> 
      <p:column headerText="File Name"> 
       #{attachment.fileName} 
      </p:column> 
      <p:column headerText="File Description" style="width: 200px"> 
       #{attachment.description} 
      </p:column> 
      <p:column headerText="File Type" style="width: 20px"> 
       #{attachment.fileType} 
      </p:column> 
     </p:dataTable> 
    </p:column> 
</p:dataTable> 

然後,在我的支持bean(爲myBean),我實現onRowSelect/onRowUnselect從地圖上添加/刪除我的選擇。附件的ID是關鍵,附件是價值。