在primefaces中使用rowKey将dataTable与新实体一起使用

时间:2013-09-14 00:53:56

标签: jsf primefaces datatable

嗯,我知道我必须从我的对象中选择一个唯一的字段,比如ID。然后我的rowKey是“item.id”。这在dataTable中加载所有itens时工作正常,但是如果我添加一个新项(此对象在数据库中没有持久化)并且具有空ID,则它在我的dataTable中不起作用。

这是什么解决方案?我只能使用ID作为rowKey,但有时我需要添加一个带有NULL ID的新对象(因为这还没有在数据库上保留)。

查看我的代码:

<p:dataTable rowKey="#{item.id}" var="item"
                    value="#{orcamentoMB.itens}"
                    emptyMessage="Não foi encontrado nenhum registro"
                    id="dataTableItens"
                    selection="#{orcamentoMB.selectedItemOrcamento}"
                    selectionMode="single" rowIndexVar="rowIndex"
                    rowStyleClass="#{(rowIndex mod 2) eq 0 ? 'first-row' : 'second-row'}">

3 个答案:

答案 0 :(得分:11)

然后使用另一个唯一标识符。可能是hashCode()甚至是toString()

rowKey="#{not empty item.id ? item.id : item.hashCode()}"

答案 1 :(得分:2)

如果你没有使用EL 2.2,那么你就不能调用方法,你可以在Item类中创建一个方法来获取一个用作rowKey的唯一ID,例如:

public int getRowKey() { return this.hashCode(); }

然后你可以在JSF页面中使用:

rowKey="#{item.rowKey}"

答案 2 :(得分:0)

这不是答案,而是对建议的解决方案的评论。

请记住,您最终可能会获得非唯一的rowKey。因此,我决定使用-1作为新行的行键,并且一次只接受一个新行,希望对您有所帮助。