我有一种情况,分页应该是动态的。这意味着它应该随着 load 方法的每次调用而改变。

我想动态设置 setRowCount() 方法并为 dataTable 提供分页

@Override
public List<ProjectMasterModel> load(int first,int pageSize,StringsortField, SortOrder sortOrder, Map<String, String> filters) {
    List<ProjectMasterModel> data=new ArrayList<ProjectMasterModel>();
    LazyDataModel<ProjectMasterModel> newdata = null;
    ProjectMilestoneDaoImpl milestoneDaoImpl=(ProjectMilestoneDaoImpl) ObjectFactory.getBean("projectMilestoneDao");
    SessionFactory sessionFactory=(SessionFactory) ObjectFactory.getBean("sessionFactory");
    sessionFactory.getCurrentSession().beginTransaction();

    try{
        data.addAll(milestoneDaoImpl.populateLazyRandomProjects(first,pageSize));
        setRowCount(milestoneDaoImpl.getRowCount_Of_ProjectList());

        // very important line to show the pagination

    }catch(Exception e){
        CmsLogger.errorLog(LazyProjectDataModel.class, e);
    }finally{
        sessionFactory.getCurrentSession().close();
    }

    if(sortField != null)
       Collections.sort(data,new ProjectMasterModel());

    return data;
}

这里我使用了一个查询来获取数据大小来设置行数。
在给定的情况下,它们可能是添加到数据库中的记录数。
所以分页应该动态增加。
但是,如果我将 setRowCount() 方法更改为动态值,它不会反射(reflect)它保持其第一次设置的原始值。

最佳答案

PrimeFaces 不支持开箱即用。 A fix has been checked in to trunk on Feb 11th 2016, tagged 6.0(所以它至少应该在当前的 6.0RCx 版本中)。我不确定它是否在 Elite 版本中 >=5.2.20 或 >=5.3.7(从 2 月 12 日开始)

这不起作用的一个重要原因是您可能在加载方法服务器端执行的更新 rowCount 是 而不是 应用于分页器客户端。但是,由于它 从服务器传输到客户端 ,您可以在每个 ajax 调用(页面、排序、过滤器)的 oncomplete 中更新它。实际上,那是 patch 的很大一部分(另一部分是从 ajax 响应中读取值)。

结合调用它,例如ajax 页面事件的 oncomplete 将解决这个问题:

function updatePaginator(xhr, status, args) {
    var paginator = PF('DataTableWidgetVar').paginator;
    paginator.cfg.rowCount=args.totalRecords;
    paginator.cfg.pageCount = Math.ceil(value / paginator.cfg/rows)||1;
    paginator.updateUI();
}

然后您可以在每次调用 load 方法时,
  • 尝试读取 pageSize+1 条记录
  • 如果您可以读取 pageSize+1(但仍返回 pageSize 记录),则将计数设置为此 (pageSize+1)
  • 如果它们是 pageSize 或更少,则将计数设置为读取的行数。
  • 关于jsf - 如何更改 p :datatable dynamically 的延迟加载的 setRowCount,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19396746/

    10-11 00:31