如何使用liveScroll选择primefaces数据表中的所有

如何使用liveScroll选择primefaces数据表中的所有,primefaces,datatable,Primefaces,Datatable,我将primefaces v5.3 dataTable与liveScroll=“true”和selectionMode=“multiple”一起使用。 标题复选框仅选择可见的行,当我向下滚动时,新行显示为未选中。 我希望标题复选框选择所有行:可见和不可见。 只选择可见行是毫无意义和无用的。 有可能修复吗 我试图通过处理“toggleSelect、rowSelectCheckbox和rowSelectCheckbox”事件将所有表数据添加到选择中。它在后端工作,但在UI中,行仍然未被选中。使用此脚

我将primefaces v5.3 dataTable与liveScroll=“true”和selectionMode=“multiple”一起使用。 标题复选框仅选择可见的行,当我向下滚动时,新行显示为未选中。 我希望标题复选框选择所有行:可见和不可见。 只选择可见行是毫无意义和无用的。 有可能修复吗


我试图通过处理“toggleSelect、rowSelectCheckbox和rowSelectCheckbox”事件将所有表数据添加到选择中。它在后端工作,但在UI中,行仍然未被选中。

使用此脚本替换primefaces的原始updateData函数

PrimeFaces.widget.DataTable.prototype.updateData = (function() {

    var cached_function = PrimeFaces.widget.DataTable.prototype.updateData;
    return function() {
        var reselectAll = (this.selection != undefined && (this.selection[0] === '@all' || this.selection.length === this.getTbody()[0].getElementsByTagName('tr').length);
        var result = cached_function.apply(this, arguments);
        if (reselectAll) {
            this.selectAllRows();
        }
        return result;
    };
})();

这将自动选择表上新加载的行(仅在客户端可见的行)

“仅选择可见行是没有意义和无用的。是否可以修复?”对于您的用例可能是这样。在过去的5年里,我从来没有听说过这个要求。这是一个危险的要求。最终用户可能不会预料到这一点(我不会),并对许多行执行操作。由于这是一个不常见的要求,我怀疑是否有一个简单的解决办法。下载组件的源代码,检查是否可以“修复”,这是我唯一能想到的。但变量表未定义,此选项没有@all值,只有数字801802。。。819,…已修复。此外,如果您使用表的selectAllRows()方法来选择所有行,则选择将具有值'@all'。现在它部分起作用。但我不理解条件“| | this.selection.length===this.getTbody()[0].getElementsByTagName('tr').length”。对我来说,它是不必要的,或者可能是“| |…===”应该被“&&…!=”替换?我不明白该如何调用“selectAllRows();”第一次将“@all”放入选择。
此选项有两个可能的值。选择
,这意味着表已选择所有记录,
['@all']
[**一个包含所有选定行ID的数组**]
,这两个条件都会验证其中一个