在 Prime faces 数据表中延迟加载时如何在分页后保留选择列表和复选框?

问题描述 投票:0回答:3

我在素面数据表上实现了延迟加载。它工作正常,但是当页面更改时,选择会被清除。如何在页面更改时保留其他页面的选择并返回页面。 我在这里发现了一个相关问题。

这个答案帮助我保留选定的对象,但在返回页面时未能保留表格中的复选框。

使用 Prime Faces 版本 6.2

jsf datatable primefaces pagination lazy-loading
3个回答
1
投票

由于 OP 不想升级到 6.2 以上,因此解决方案是此处列出的解决方法: https://forum.primefaces.org/viewtopic.php?f=3&t=47224

添加 AJAX

toggleSelect
事件

<p:ajax event="toggleSelect" 
global="false" 
immediate="true"  
update=":usersManagerForm:usersTable:usersActions" 
listener="#{usersManagerBean.onToggleSelect}" />

以及支持bean方法:

public void onToggleSelect(ToggleSelectEvent event) {
        List<Compte> comptesListOfCurrentPage = (List<Compte>) compteLazyDataModel.getWrappedData();
        if(event.isSelected()) {
            selectedComptesList.addAll(comptesListOfCurrentPage);
        } else {
            selectedComptesList.removeAll(comptesListOfCurrentPage);
        }
    }

1
投票

我在 2 个答案的帮助下找到了解决方案

  1. 从这里
  2. 感谢上面anser的melloware

.xhtml

<p:dataTable selection="#{myBean.selectedRows}" ... >
   <p:ajax event="rowSelectCheckbox" process="@this" listener="#{myBean.onSelectRow}" />
   <p:ajax event="rowUnselectCheckbox" process="@this" listener="#{myBean.onUnselectRow}" />
<p:ajax event="page" process="@this" listener="#{myBean.onPagination}" />
<p:ajax event="toggleSelect" process="@this" listener="#{myBean.onToggle}" />
   <p:column selectionMode="multiple" ... />
    ...
 </p:dataTable>

.java

    private List<MyRowClass> selectedRows;
    private List<MyRowClass> selectedRowsSaved;

    ...

    public void onSelectRow(SelectEvent event){
        selectedRowsSaved.add((MyRowClass) event.getObject());
    }

    public void onUnselectRow(UnselectEvent event){
        selectedRowsSaved.remove((MyRowClass) event.getObject());
    }
    
    public void onToggle(ToggleSelectEvent event){
    List<Object> completeListOfCurrentPage = (List<Object>) compteLazyDataModel.getWrappedData();
        if(event.isSelected()) {
            selectedRowsSaved.addAll(comptesListOfCurrentPage);
        } else {
            selectedRowsSaved.removeAll(comptesListOfCurrentPage);
        }
    }

    public void onPagination(){
        if(selectedRowsSaved!=null && selectedRowsSaved.isEmpty()}{
            selectedRows.addAll(selectedRowsSaved);
        }
    }
    public List<MyRowClass> getSelectedRows(){
        return selectedRowsSaved;
    }

    public void setSelectedRows(List<MyRowClass> selectedRows){
        this.selectedRows = selectedRows;
    }

0
投票

有这方面的消息吗?我仍然无法让这个工作,我正在使用 primefaces 10

© www.soinside.com 2019 - 2024. All rights reserved.