【问题标题】:Why Vaadin TreeGrid loads the data two times after Scrolling?为什么 Vaadin TreeGrid 在滚动后加载数据两次?
【发布时间】:2022-01-23 18:47:36
【问题描述】:

我有以下问题:当我的 Treegrid 第一次加载时,所有正确添加的根数据。但是当我在 TreeGrid 中滚动时,数据会再次被拾取并添加到 Treegrid。

有谁知道如何在滚动时停用 Treegrid 中的延迟加载?

这是我创建 Treegrid 的方法

 private Component createCategoriesTree() {
    treeGrid.setHeight("100%");
    treeGrid.addComponentHierarchyColumn(productCategory -> getProductCategoryName(productCategory)).setHeader("Kategorie").setSortable(false);
    ProductCategory root = productCategoriesService.getRootCategory();
    HierarchicalDataProvider dataProvider = new AbstractBackEndHierarchicalDataProvider<ProductCategory, Void>() {
        @Override
        public int getChildCount(HierarchicalQuery<ProductCategory, Void> query) {
        
            if (query.getParent() == null) {
                List<ProductCategory> list = productCategoriesService.findByParentId(root.getId());
                return (int) list.size();
            } else {
                List<ProductCategory> list = productCategoriesService.findByParentId(query.getParent().getId());
                return (int) list.size();
            }
        }

        @Override
        public boolean hasChildren(ProductCategory item) {
            List<ProductCategory> list = productCategoriesService.findByParentId(item.getId());
            if (list != null && list.size() > 0) {
                return true;
            } else {
                return false;
            }
        }

        @Override
        protected Stream<ProductCategory> fetchChildrenFromBackEnd(HierarchicalQuery<ProductCategory, Void> query) {
            if (query.getParent() == null) {
                return productCategoriesService.findByParentId(root.getId()).stream();
            } else {
                return productCategoriesService.findByParentId(query.getParent().getId()).stream();
            }
        }
    };
    treeGrid.setDataProvider(dataProvider);
    return treeGrid;
}

【问题讨论】:

  • 你的ProductCategory 有正确的等号和哈希码吗?
  • 是的!谢谢。我想我找到了解决方案,我将 fetchChildrenFromBackEnd() 更改为: return productCategoriesService.findByParentIdOrderByCategoryNameAsc(root.getId()).stream().skip(query.getOffset()).limit(query.getLimit());跳过和限制方法成功了。

标签: vaadin vaadin-flow


【解决方案1】:

问题是:

缺少如下方法体的跳过方法:

@Override
        protected Stream<ProductCategory> fetchChildrenFromBackEnd(HierarchicalQuery<ProductCategory, Void> query) {
            if (query.getParent() == null) {
                return productCategoriesService.findByParentIdOrderByCategoryNameAsc(root.getId()).stream().skip(query.getOffset()).limit(query.getLimit()); //THIS
            } else {
                return productCategoriesService.findByParentIdOrderByCategoryNameAsc(query.getParent().getId()).stream(); //THIS
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多