Primefaces dataTable多选同一对象

时间:2013-09-17 18:32:28

标签: jsf primefaces datatable

我遇到了带有复选框的dataTable多重选择问题(如第二个:http://primefaces.org/showcase/ui/datatableRowSelectionRadioCheckbox.jsf)。 当我尝试在backingBean中执行一个方法时,所选的项总是具有正确的大小,但是具有相同的对象。 示例:我在我的dataTable中选择三个消息:消息1,消息2和消息3.当我在JSF页面中执行我的方法时,我选择的项目如下所示:

Messages[0] = Message 1
Messages[1] = Message 1
Messages[2] = Message 1

这是我的JSF页面:

<p:dataTable id="mensagensLidas" var="msg" value="#{mensagensBean.msgGrupoModel}" 
paginator="true" rows="10" selection="#{mensagensBean.selectedMsgsGrupo}">

    <p:column selectionMode="multiple" style="width:2%"/>

    <p:column headerText="Titulo:" style="width:49%">  
        #{msg.titulo}  
    </p:column>

    <f:facet name="footer">
        <p:commandButton id="multiViewButton" value="#{msgs.delete}" icon="ui-icon-trash" actionListener="#{mensagensBean.excluirMsgsGrupo}" update=":tabMain" ajax="true"/>
    </f:facet>

</p:dataTable>

2 个答案:

答案 0 :(得分:1)

除了我使用rowKey之外,您的上述代码对我来说还不错 尝试使用rowKey

中的p:dataTable属性
<p:dataTable id="mensagensLidas" var="msg" value="#{mensagensBean.msgGrupoModel}" 
                paginator="true" rows="10" selection="#{mensagensBean.selectedMsgsGrupo}"
                rowKey="#{msg.titulo}">
....

</p:dataTable>

在Datables中进行选择时,使用rowKey是必须且最佳做法,有助于将选定的<tr>映射到您正在填写的POJO。
通常情况下,如果rowKey具有独特的性能,您甚至可以将#{msg} POJO中的整数变量作为最佳实践。

答案 1 :(得分:0)

我发现了这个问题。我的DataModel与getRowData一起返回的是同一个对象。我做了一个错误的比较。谢谢大家!