当前位置: 首页 > 知识库问答 >
问题:

PrimeFaces数据表分页器在首次延迟加载时不显示[重复]

裴星洲
2023-03-14

我正在使用PrimeFaces 6.0。我正在创建一个使用延迟加载的数据表。我已经设置了这个。在我的load方法中设置行计数(计数)。但我的分页器显示不正确(它仅显示禁用的“上一步”、“下一步”、“开始”、“结束”按钮)。

当我筛选表格或更改排序时,分页器将显示页面。此外,当我运行此JavaScript时,paginator会显示页面:

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个答案

余靖
2023-03-14

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

另见:

如何使用延迟加载和分页查询Primefaces dataTable的数据

 类似资料:
  • 问题是,每次尝试筛选表时,我的 实现中被重写的方法 都会被调用两次。 我的<代码>LazyDataModel<代码>实现: 我的xhtml视图: 和控制器

  • 我正在使用JSF2。0和PrimeFaces3。1和3。1用于业务逻辑。我试图使用DataTable—延迟加载。但它给了我以下的错误。请帮忙。 发生错误:

  • 我有一个简单的页面: 而中的不起作用,只是刷新页面。但是外面的那个正在工作。 如果我以这种方式更改和: 内部的就像一个符咒。 有人知道为什么? 是虫子吗? 我在 玻璃鱼3.1.2 JSF 2.1.11(Mojarra) PrimeFaces 3.4-快照

  • 我想导出一个在报表生成期间具有LazyLoad数据模型的数据表(带分页)。 问题:当我导出时,报告从数据库逐页生成,然后导出到Excel/PDF,这会消耗更多时间。我想通过跳过逐页生成数据集来在单个数据库访问中获取它。 我生成了如下代码片段: JSF: 受管Bean: 数据模型: 注: < li >没有语法错误。 < li >所有自定义类型类都已定义。 如何通过跳过逐页生成记录来获得Excel报表

  • 问题内容: 当有人首次访问页面时(登录我的应用程序后),我试图显示一种引导模式。我想使用模式来提供“入门”视频,并提供“不要再向我展示”复选框,以便访问者可以在以后的登录时绕过“入门模式”。 我可以使用以下教程在页面加载时显示模式: 在页面加载时启动Bootstrap Modal 但是,现在我只停留在如何使它仅在用户登录后第一次访问该页面时显示它(它当前在刷新页面时启动等)。 我是Java语言和编

  • 问题内容: 在我的JSF数据表中,我实现了延迟加载,当我对记录进行分页时,执行下一组记录大约需要4到5秒的时间,实际上执行结果应该少于一秒钟。 这是我实现它的方式所发生的,不确定我该如何解决。 扩展LazyDataModel的DataModel类 和道课 有人可以解释是什么原因导致了记录分页时出现延迟吗? 如果我删除以下内容 并执行,那么它可以完美执行而没有延迟,但是问题始终是5,这是我每页的默认