2017-03-07 36 views
2

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

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

PF('myTable').clearFilters(); 

有关如何让paginator工作而不应用黑客的任何想法?

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

<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); 
    } 

} 

回答