【发布时间】:2015-11-24 06:26:28
【问题描述】:
是否有任何特定方法可以在 Vaadin 表中实现分页/延迟加载。 我试图找到一些文档,但我找不到。
【问题讨论】:
-
延迟加载在表格(和大多数其他组件)中实现。但要让它工作,你需要一个能正确处理它的容器。
-
能否告诉我我使用的容器类型
-
您的数据以什么方式存储?
是否有任何特定方法可以在 Vaadin 表中实现分页/延迟加载。 我试图找到一些文档,但我找不到。
【问题讨论】:
使用Viritin add-on 及其 MTable 组件。 I 是最有效的(服务器资源副)方式,并且拥有最简单的 API(根本不需要使用容器 API!)。只需实现两个简单的接口即可。这是一个包含 lambda 和基本 DAO 的示例。
@Inject
GPSRouteService s;
@Override
public Component getTable() {
return new MTable<Update>(s::fetchUpdates, s::getEntityCount)
.withFullWidth();
}
以上代码示例来自this example app,展示了 Vaadin 中的各种延迟加载方法。如果您是 Spring 用户,请查看 this example,它连接到 Spring Data JPA 存储库并使用可选的排序支持。
我是 Viritin 的维护者,但我也维护 Vaadin 和各种附加组件已有 7 年了,现在我正在为 Vaadin 做技术营销。
【讨论】:
在 Vaadin 8 中对延迟加载进行了完全重新设计并提供了良好的开箱即用支持。这是一个示例 from the official docs:
DataProvider<Person, Void> dataProvider = new BackendDataProvider<>(
// First callback fetches items based on a query
query -> {
// The index of the first item to load
int offset = query.getOffset();
// The number of items to load
int limit = query.getLimit();
List<Person> persons = getPersonService().fetchPersons(offset, limit);
return persons.stream();
},
// Second callback fetches the number of items for a query
query -> getPersonService().getPersonCount()
);
Grid<Person> grid = new Grid<>();
grid.setDataProvider(dataProvider);
【讨论】: