嗯,我知道我必须从我的对象中选择一个唯一的字段,比如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'}">
答案 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作为新行的行键,并且一次只接受一个新行,希望对您有所帮助。