【问题标题】:Vaadin Grid and LazyQueryContainerVaadin Grid 和 LazyQueryContainer
【发布时间】:2016-01-12 18:22:25
【问题描述】:

我已按照以下示例将惰性查询容器链接到 Vaadin Grid https://vaadin.com/wiki/-/wiki/Main/Lazy%20Query%20Container/

这些示例要求 Query 实现具有 @Override public int size() 方法。 好像,Grid就是用这个方法来获取设置容器时显示的对象总数。

Size 方法需要计数和全表扫描,这在我们的例子中是非常昂贵的。

我们不想立即设置大小,而是希望在每个 loadItems 调用中更改/更新它“@Override public List loadItems(int startIndex, int count)”

通知容器(以及最终使用该容器的网格)有关最新已知大小的最佳方式是什么?

有没有设置懒惰的例子?

提前谢谢你。

【问题讨论】:

  • 我个人还没有使用过,但我怀疑分页需要大小。在不知道数据库中有多少项目的情况下,很难确定在public List loadItems(int startIndex, int count) 期间要加载哪个块@
  • 将大小估计推迟到 loadItems 调用对您有帮助吗?无论如何,在第一次渲染时,这种 UI 模式都需要大小。如果您无法优化计数查询,我也会在 UI 级别退回到“传统分页”。有些人使用(对于这个一般问题)单独的表和 SQL 触发器。
  • 感谢您的回复。这是我尝试过的,但到目前为止它不起作用:我将 LazyContainer Size 设置为 Integer.MAX_VALUE。每个 loadItems 方法调用,都会从数据库中查询请求的间隔,如果不是最后一页,它将保持大小为整数最大值。如果它是最后一页,它将为容器设置正确的大小。因此,容器本身似乎可以工作。但是,Grid 仅在容器最初分配给 Grid 时才检查大小。并且永远不会在 loadItems 方法调用之前或之后再次查询大小。它总是假设大小是相同的。
  • 您可以尝试以某种方式触发 ItemSetChangeEvent,这应该会通知组件项目数量可能已更改。您也可以尝试 MGrid 中的方法(在 Viritin 附加组件中):github.com/viritin/viritin/blob/master/src/main/java/org/vaadin/… 这会使缓存无效,可能会起作用,但不确定。你也可以直接用类似的方法尝试 MGrid,它有相当先进和更简单的延迟加载解决方案。

标签: vaadin lazy-loading vaadin-grid


【解决方案1】:

我有一个用小型“缓存”和 Spring Data Solr 编写的解决方案。在这种情况下,仅在需要时才传递请求。您可以根据自己的目的扩展或更改它。

SolrLazyQuery (Pagination) mit Vaadin Grid und Spring Data Solr

final LazyPagedContainer<T> container = new LazyPagedContainer<>(this.currentGenericClass);
container.setLazyQuery(new LazyContainerQuery<T>(firstPage) {

    @Override
    protected Page<T> getPageByNumber(final int pageNumber) {
        final SolrPageRequest solrPage = new SolrPageRequest(pageNumber, PAGE_SIZE, MyGrid.this.currentSort);
        return MyGrid.this.search(solrPage, MyGrid.this.currentSearch, MyGrid.this.currentFilterValues);
    }
});

Vaadin Grid / Table requests to this query: 
startIndex: 0, numberOfIds: 95 
startIndex: 0, numberOfIds: 139 
startIndex: 52, numberOfIds: 171 
startIndex: 137, numberOfIds: 171 
[...] 

Requests to Solr: 
start: 0 rows: 100 
start: 100 rows: 100 
start: 200 rows: 100 
start: 300 rows: 100 
[...] 

【讨论】:

  • 感谢亚历山大的回复。我会在几天内尝试并分享结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2015-06-01
相关资源
最近更新 更多