6

好吧,我知道我必须从我的对象中选择一个唯一的字段,例如 ID。然后我的rowKey是“item.id”。这在加载数据表中的所有项目时工作正常,但是如果我添加一个具有空 ID 的新项目(该对象尚未保存在数据库中),它不会出现在我的数据表中。

解决方案是什么?我只是可以使用 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'}">
4

3 回答 3

12

然后使用另一个唯一标识符。也许是hashCode(),甚至是toString()

rowKey="#{not empty item.id ? item.id : item.hashCode()}"
于 2013-09-14T19:21:24.317 回答
2

如果您没有使用 EL 2.2,因此您无法调用方法,您可以在 Item 类中创建一个方法来获取用作 rowKey 的唯一 ID,例如:

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

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

rowKey="#{item.rowKey}"
于 2013-10-31T07:38:49.623 回答
0

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

请记住,您最终可能会得到非唯一的 rowKey。出于这个原因,我决定使用 -1 作为新行的行键,并且当时只接受一个新行,希望这会有所帮助。

于 2018-07-21T05:42:20.817 回答