0

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

这些示例要求 Query 实现具有 @Override public int size()方法。看起来,Grid 使用这种方法来获取设置容器时将显示的对象总数。

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

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

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

是否有任何设置大小懒惰的例子?

先感谢您。

4

1 回答 1

1

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

SolrLazyQuery (Pagination) mit Vaadin Grid 和 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 
[...] 
于 2016-02-09T07:25:11.907 回答