单击 Primefaces 数据表中的另一行时不要取消选择行
Do not unselect rows when clicking on another rows in Primefaces datatable
我正在使用 Primefaces 3.5 数据 Table。 table 启用了多选模式。基本上,table 与 [this showcase][1] 中的最后一个相同。所以 table 是这样定义的
<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 修复此问题,请查看较新版本的源代码,了解它们如何 'fixed' 并创建一个 js 补丁……当然,您也可以尝试使用较新的 PF 版本。做后者有很多优势。
不post在这里(或试图创建)一个补丁(或尝试创建一个)的原因是它太复杂了post这里和imo超出了SO的范围
从问题中复制(其中 OP 作为 'answer' 添加):
按照 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()
。
我正在使用 Primefaces 3.5 数据 Table。 table 启用了多选模式。基本上,table 与 [this showcase][1] 中的最后一个相同。所以 table 是这样定义的
<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 修复此问题,请查看较新版本的源代码,了解它们如何 'fixed' 并创建一个 js 补丁……当然,您也可以尝试使用较新的 PF 版本。做后者有很多优势。
不post在这里(或试图创建)一个补丁(或尝试创建一个)的原因是它太复杂了post这里和imo超出了SO的范围
从问题中复制(其中 OP 作为 'answer' 添加):
按照 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()
。