Vaadin Blogの記事に基づいてレイジーグリッドローディングを実装し、特定のグリッドカラムにフィルタを追加したいとします。この場合、lambda関数をCallbackDataProviderとして設定することにより、遅延ロードを行います。以下のコードをご覧ください。Vaadinグリッド - レイジーローディングを使用する複数のフィルタ
CallbackDataProviderとフィルタリングをどのように組み合わせることができますか?このStackOverflow postによれば、著者は、CallbackDataProvider上のラッパーとしてConfigurableFilterDataProviderを使用することでこの問題を解決できます。残念ながら、彼はさらなるコードを共有していませんでした。 これを達成するためのヒントを教えてください。
私たちのコードが完全にブログの記事に基づいており、以下のようになっている。
データプロバイダの設定public class Person {
private Long id;
private String firstName;
private String lastName;
private String email;
... getter and setters ...
}
public class PersonService {
public List<Person> findAll(int offset, int limit) { ... }
public int count() { ... }
}
:タイプMap<String, Object>
のグリッドを使用した例では
grid.setDataProvider(
(sortOrders, offset, limit) -> {
Map<String, Boolean> sortOrder = sortOrders.stream().collect(
Collectors.toMap(
sort -> sort.getSorted(),
sort -> SortDirection.ASCENDING.equals(sort.getDirection())
)
);
return service.findAll(offset, limit, sortOrder).stream();
},
() -> service.count()
);
感謝。あなたの投稿の問題をhttps://vaadin.com/docs/v8/framework/datamodel/datamodel-providers.html#lazy-filteringと組み合わせて解決しました。 – Fabian
私のコードは汎用システムから来ていて、私はDAOにそれを簡素化したくなかったので、多分誰かがもっと便利だと思うでしょう:) – avix