我已经按照以下示例将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)”中更改/更新它,而不是立即设置大小。
通知容器(以及最终使用该容器的网格)关于最新已知尺寸的最佳方法是什么?
是否有任何设置懒惰大小的例子?
提前谢谢你。
答案 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
[...]