【问题标题】:Lazy loading in Vaadin Table?Vaadin 表中的延迟加载?
【发布时间】:2015-11-24 06:26:28
【问题描述】:

是否有任何特定方法可以在 Vaadin 表中实现分页/延迟加载。 我试图找到一些文档,但我找不到。

【问题讨论】:

  • 延迟加载在表格(和大多数其他组件)中实现。但要让它工作,你需要一个能正确处理它的容器。
  • 能否告诉我我使用的容器类型
  • 您的数据以什么方式存储?

标签: vaadin vaadin7


【解决方案1】:

使用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 做技术营销。

【讨论】:

  • 能否分享一个示例代码,说明如何使用此 Viritin 实现延迟加载
  • 更新了答案以包含指向“完整堆栈”示例的链接,均针对 JPA 后端,但同样的方法也适用于大多数其他后端。
【解决方案2】:

在 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);

【讨论】:

    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多