我有一個用小「緩存」和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
[...]
我個人還沒有使用它,但我懷疑是必需的_pagination_大小。在不知道數據庫中有多少項目的情況下,很難找出在'public List loadItems(int startIndex,int count)期間加載哪個塊' – Morfic
是否推遲大小估計到loadItems調用可以幫助你?無論如何,在第一個渲染中,這種UI模式需要大小。如果您無法優化計數查詢,我只需回到UI級別的「傳統分頁」。一些使用(對於這個通用的問題)一個單獨的表和SQL觸發器。 – mstahv
謝謝你的回覆。這是我所嘗試過的,到目前爲止它沒有工作: 我將LazyContainer Size設置爲Integer.MAX_VALUE。每個loadItems方法調用將從數據庫中查詢所請求的時間間隔,如果它不是最後一個頁面,它將保持大小爲整數max。如果它是最後一頁,它將爲容器設置正確的大小。 所以,容器本身看起來像工作。但是,網格僅在容器初始分配給網格時才檢查大小。並且從不在loadItems方法調用之前或之後再次查詢大小。它始終假定大小相同。 – turgos