Vaadin Grid和LazyQueryContainer

时间:2016-01-12 18:22:25

标签: vaadin lazyload vaadin-grid

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

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

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

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

通知容器(以及最终使用该容器的网格)关于最新已知尺寸的最佳方法是什么?

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

提前谢谢你。

1 个答案:

答案 0 :(得分: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 
[...]