【问题标题】:Primefaces datatable returns the same selection itemPrimefaces 数据表返回相同的选择项
【发布时间】:2017-12-14 12:16:30
【问题描述】:

我需要 Primefaces 数据表的帮助。

我尝试使用单选模式实现 dataTable。 当我选择表中的任何行时,它会被正常选择。但是我在调​​试模式下看到 selectedUser 字段始终具有相同的值(第一个表的项),而不管实际的 UI 选择。

我的问题是我的代码有什么问题?

不幸的是,谷歌请求“primefaces 数据表错误选择”没有返回任何对我有帮助的东西,我敢问社区。​​p>

我还发现了以下示例:
primefaces datatable selected row always the same value 但这也不是我的情况。

我认为(根据谷歌示例和 PF 文档)当我们选择一行时,此操作会自动触发“选择”对象设置器。错了吗?

我的 PF 版本是 5.3

该表的定义如下:

<p:dataTable scrollable="true" id="SearchResultsTable" value="#{searchFormBean.users}" var="item" scrollHeight="300"
     widgetVar="SearchResultsTable" selectionMode="single" selection="#{searchFormBean.selectedUser}" 
     rowKey="#{not empty item.usersListId ? item.usersListId : item.hashCode()}" emptyMessage="No rows found.">

     <p:ajax event="rowSelect" listener="#{searchFormBean.onResultTableRowSelect}" update=":searchPage:j_idt68:summaryTable" />

     // Columns

我使用以下example作为模板

我的“rowSelect”事件方法如下:

public void onResultTableRowSelect(SelectEvent event) {

        summaryObjects.clear();

        summaryObjects.add(selectedUser);

    }

summaryObjects 是我传入另一个表的列表。

提到 SearchFormBean 是 ViewScoped。

你能帮我找出我的错误吗?如有必要,我会提供任何其他信息。

谢谢。

【问题讨论】:

  • 使用 ajax rowSelect 时,我总是通过事件检索所选对象并实现选择属性的空设置器,在您的情况下为 setSelectedUser
  • 嗨@Kukeltje,谢谢你的回复听起来不错。我试过你的方法,但它对我不起作用。我将 rowSelect 方法更改为 selectedUser = (User) event.getObject(); ,启动调试器,发现 event.getObject() 返回相同的对象。

标签: jsf primefaces datatable


【解决方案1】:

我发现了我的错误并解决了问题。 事实证明,我用作某些项目的 rowKey 的item.usersListId 为空。这意味着该值至少不是唯一的。我认为not empty item.usersListId ? item.usersListId : item.hashCode() 的构造保证了唯一性。但在我的情况下,使用不正确。 我只是将 rowKey 值更改为另一个唯一值,并且选择功能变得正确。

谢谢。

【讨论】:

    猜你喜欢
    • 2016-06-26
    • 1970-01-01
    • 2015-06-04
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 2014-12-23
    相关资源
    最近更新 更多