我正在使用 Vaadin 23 并尝试执行排序。但是,要求是在 UI 上对获取的元素进行排序,而不是调用后端。
这是参考代码
设置后端数据提供者
@Override
protected Stream<MyClassWrapper> fetchFromBackEnd(Query<MyClassWrapper, MyFilter> query) {
MyFilter initFilter = MyFilter.builder().build();
Stream<MyClass> stream = myService.getData(initFilter).stream();
Stream<MyClassWrapper> wrapperStream = stream.map(MyClassWrapper::new).sorted();
return wrapperStream;
}
网格创建
public class MyGridComponent extends Grid<MyWrapper> {
public MyGridComponent() {
super(MyWrapper.class, false);
addColumn(MyWrapper::getName)
.setHeader("Column1")
.setSortable(true)
.setComparator(MyWrapper::getColumn1)
.setId("my-grid-column-name");
}
}
我在列上尝试了 setComparator(),但它正在调用 API。任何线索将不胜感激。
Backend-DataProviders 的全部意义在于,并非所有数据库项都需要急切加载。但是,当您对列表进行排序或过滤时,排序/过滤应该应用于所有列表,因此需要调用该服务。
您必须使用像 ListDataProvider 这样的内存数据提供程序,并从数据库/服务中加载所有项目。只有经过排序和过滤后才不会调用任何服务。