Primefaces:从嵌套的DataTables中选择行

时间:2012-11-01 23:15:31

标签: jsf-2 groovy datatable primefaces nested

我正在使用Primefaces 3.4和Groovy。我创建了对象PartAttachment

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

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

class Attachment {
    String fileName
    String fileType
    String description
}  

我的视图嵌套了DataTables,如下所示:

<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被设置为 last 所选附件!

问题:如何启用每个零件实例以保存其选定的附件?谢谢你的时间。

注意:如果我调试我的AttachmentDataModel,我会看到getRowData点击了我做的选择。

1 个答案:

答案 0 :(得分: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是密钥,附件是值。