PrimeFaces数据表分页器在第一次延迟加载时不会显示

时间:2017-03-07 09:35:21

标签: primefaces pagination pf-datatable

我正在使用PrimeFaces 6.0。我正在创建一个使用延迟加载的数据表。我在this.setRowCount(count)方法中设置了load。我的分页器虽然没有正确显示(它只显示已禁用的上一个,下一个,开始,结束按钮)。

当我过滤我的表或更改排序时,分页器显示页面。此外,当我运行此JavaScript时,分页器显示页面:

PF('myTable').clearFilters();

关于如何在不应用黑客的情况下让分页器工作的任何想法?

这是我的表(相关属性):

<p:dataTable value="#{controller.lazy}"
             lazy="true"
             var="subitem"
             rowKey="#{subitem.id}"
             paginator="true" paginatorPosition="bottom"
             rows="10"
             sortBy="#{subitem.emailAddress}" sortOrder="ascending"
             widgetVar="myTable"
>

我懒惰的模特(相关部分):

public class LazyDataModel<T> extends org.primefaces.model.LazyDataModel<T>
{

  private final QueryBuilder<T> queryBuilder;

  private final Class<T> type;


  public LazyDataModel(final QueryBuilder<T> queryBuilder, final Class<T> type)
  {
    this.queryBuilder = queryBuilder;
    this.type = type;
  }


  private void updateRowCount()
  {
    setRowCount(queryBuilder.count().intValue());
  }


  @Override
  public List<T> load(int first, int pageSize, List<SortMeta> multiSortMeta, Map<String, Object> filters)
  {
    if (filters != null) {
      queryBuilder.addFilters(filters);
    }
    if (multiSortMeta != null) {
      multiSortMeta.forEach(s -> queryBuilder.orderBy(s.getSortField(), s.getSortOrder() == SortOrder.ASCENDING));
    }
    updateRowCount();
    TypedQuery<T> typedQuery = queryBuilder.createQuery();
    typedQuery.setMaxResults(pageSize);
    typedQuery.setFirstResult(first);
    return typedQuery.getResultList();
  }


  @Override
  public List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters)
  {
    List<SortMeta> multiSortMeta = null;
    if (sortField != null && sortOrder != null) {
      multiSortMeta = Arrays.asList(new SortMeta(null, sortField, sortOrder, null));
    }
    return load(first, pageSize, multiSortMeta, filters);
  }

}

1 个答案:

答案 0 :(得分:1)

使用Lazy数据表,您还需要在LazyDataModel#setRowCount(int n)方法之外使用load设置行计数,即在初始化bean期间。

另见:

http://wesmckinney.com/blog/python-hdfs-interfaces/