当单击Primefaces数据表中的另一行时,不要取消选择行

Do not unselect rows when clicking on another rows in Primefaces datatable

本文关键字:一行 选择 取消 数据表 Primefaces 单击      更新时间:2023-09-26

我正在使用Primefaces 3.5数据表。该表启用了多选择模式。基本上,这个表与[本展示][1]中的最后一个表相同。表是这样定义的

<p:dataTable id="myTable" var="item" value="#{myController.items}" selection="#{myController.selectedItems}" rowKey="#{item.id}">
        <p:column selectionMode="multiple"/>
        <p:column headerText="Id"> 
...

因此,当用户通过单击复选框选择了一些行,然后意外地单击了一行时,除了用户最后单击的行外,所有选中的行都变为未选中的。

问题是:是否有任何解决方案来维持行选择,即使用户将单击行出复选框?

我的一些观察:

  • 如果用户按Ctrl并单击该行,则所有其他行将保持选中。这种行为正是我想要的,但没有按Ctrl
  • 我已经查看了primefaces.js源,发现其他行被这个函数clearSelection:function(){}取消选择。当用户点击行时,不执行它是可以的。

如果您阅读了最新的文档,您可以看到在较新的版本中支持它。因此,要在3.5版本中修复这个问题,请查看更新版本的源代码,了解他们是如何"修复"这个问题的,并创建一个js补丁……当然,你也可以尝试使用更新的PF版本。后者有很多好处。

在这里发布(甚至试图创建)补丁(或试图创建一个)的原因是,在这里发布补丁太复杂了,而且超出了SO
的范围。

从问题(OP添加在那里作为'答案')复制:

正如Kukeltje所建议的,我已经创建了primefaces.js补丁,修改了DataTable小部件。为此,我从jar文件中复制了primefaces.js,进行了修改并将其放在以下目录下:

webapp
 |-- META-INF
 |-- WEB-INF
 |-- resources
 |    |-- primefaces
 |    |    `-- primefaces.js

我在primefaces.js中所做的修改只是从onRowClick: function(e, d, a)函数中删除this.unselectAllRows()