我正在使用Primefaces 3.4和Groovy。我创建了对象Part
和Attachment
:
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
点击了我做的选择。
答案 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是密钥,附件是值。