在行取消选择时刷新p:datatable的选择模型

时间:2015-06-15 09:30:44

标签: jsf primefaces datatable selection

我对Primefaces 5.0数据表的选择模型有疑问。此选择模型不会正确处理取消选择: 选择行会按预期将这些角色添加到所选行的列表中。但取消选择对此列表没有影响;取消选择的行仍保留在其中。只取消选择所有行会产生一个空列表。

以下给出了datatable的定义(简化为相关标签) - 数据模型的类型为org.primefaces.model.LazyDataModel:

<p:dataTable id="cases" 
    widgetVar="cases"
    var="cases"
    value="#{casesController.dataModel}"
    selection="#{casesController.selectedCases}"
    selectionMode="multiple"
    />

该项目中使用了一个Javascript函数,用于处理行上的点击以选择和取消选择行。

onRowClick : function(event, rowElement, silent) {
    // Check if rowclick triggered this event not a clickable
    // element in row content
    if ($(event.target).is('td,span:not(.ui-c)')) {
        var row = $(rowElement),
            selected = row.hasClass('ui-state-highlight'),
            metaKey = event.metaKey || event.ctrlKey,
            shiftKey = event.shiftKey;
            mouseBtn = event.which;

        // unselect if already selected on leftClick/touch to enable
        // contextMenu to be shown on rightclick
        if (selected && mouseBtn == 1) {
            this.originRowIndex = row.index();
            this.cursorIndex = null;
            this.unselectRow(row, silent);
        } else {
            // unselect previous selection if this is single
            // selection or multiple one with no keys
            if (this.isSingleSelection()
                    || (this.isMultipleSelection() && event
                            && !metaKey && !shiftKey && this.cfg.rowSelectMode === 'new')) {
                this.unselectAllRows();
            }

            // range selection with shift key
            if (this.isMultipleSelection() && event && event.shiftKey) {
                this.selectRowsInRange(row);
            }
            // select current row
            else {
                this.originRowIndex = row.index();
                this.cursorIndex = null;
                this.selectRow(row, silent);
            }
        }
        PrimeFaces.clearSelection();
    }
}

调试此脚本显示分支按预期传递。但在我看来,unSelectRow()与selectRow()并不相反。

在javascript函数周围添加注释以使用原始的Primefaces函数对我的问题没有影响。

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。他们扩展了PrimeFaces的实现并且未完全实现了一些方法。以下主题帮助我解决了问题:p:dataTable selections are lost after paginating a LazyDataModel