フェッチ中にデータを操作する必要があります
@Override
public Stream<T> fetch(Query<T, F> query) {
...
}
実行時に、遅延読み込み機能のためにデータがすべてフェッチされていないことがわかりました。操作するときにすべての行を取得する必要があります。
遅延読み込み機能を維持しながら、すべてのデータを並べ替え/フィルター処理して取得するにはどうすればよいですか?
編集:私の場合:フロントエンドでは、グリッドから選択できるバッチ操作がいくつかあり、最初の行または現在選択されている行から開始行を選択できます。vaadin7 では、IndexedContainer の firstItemID、lastItemID、prevItemID、nextItemID メソッドを使用して、グリッド行をループします。vaadin8 では、そのようなメソッドはありませんでした。だから私は自分のビーンに前と次のポインタを追加し、データプロバイダが行をフェッチするたびにそれらをリンクすることを考えていました
@Override
public Stream<T> fetch(Query<T, F> query) {
List<T> result = wrapped.fetch(query).collect(Collectors.toCollection(ArrayList::new));
fakeDataBean prevbean = null;
for (int i = 1; i <= result.size(); i++) {
fakeDataBean bean = result.get(i-1);
bean.setPreviousRow(prevbean);
if (prevbean!=null) {
prevbean.setNextRow(bean);
} else {
first = bean;
}
prevbean = bean;
if (i==result.size()) {
last = bean;
}
}
return wrapped.fetch(query);
}
問題は、DataProvider が遅延読み込み機能のために表示されている行のみをフェッチしていることです。