Vaadin 8 中有什么东西取代了 BeanItemContainer 吗?

Has something replaced BeanItemContainer in Vaadin 8?

我从 GitHub (https://github.com/vaadin-miki/vaadin-charts-video) 下载了 vaadin-charts-video 示例项目的副本,以了解如何 Vaadin 图表 应该被实施。然而,该项目以及我发现的大多数可用演示 code/projects 似乎是使用 Vaadin 7 和先前的编码约定编写的。我正在使用 Vaadin 8.0.5(和 JDK8)...

当 运行 Maven:

时出现这些错误
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project intro-video: Compilation failure: Compilation failure:
[ERROR] /C:/Users/dev/vaadin/vaadin-charts-video/intro-video/src/main/java/org/vaadin/miki/charts/intro/IntroChartsUI.java:[19,28] cannot find symbol
[ERROR] symbol:   class BeanItemContainer
[ERROR] location: package com.vaadin.data.util
[ERROR] /C:/Users/dev/vaadin/vaadin-charts-video/intro-video/src/main/java/org/vaadin/miki/charts/intro/IntroChartsUI.java:[54,17] cannot find symbol
[ERROR] symbol:   class BeanItemContainer
[ERROR] location: class org.vaadin.miki.charts.intro.IntroChartsUI
[ERROR] /C:/Users/dev/vaadin/vaadin-charts-video/intro-video/src/main/java/org/vaadin/miki/charts/intro/IntroChartsUI.java:[54,62] cannot find symbol
[ERROR] symbol:   class BeanItemContainer
[ERROR] location: class org.vaadin.miki.charts.intro.IntroChartsUI

谁能告诉我,BeanItemContainer 是否已被替换?如果是,被什么替换了?

例如,见https://github.com/vaadin-miki/vaadin-charts-video/blob/master/intro-video/src/main/java/org/vaadin/miki/charts/intro/IntroChartsUI.java的第54行 BeanItemContainer<BookPrice> container = new BeanItemContainer<>(BookPrice.class, prices);

如果更有经验的人认为这不是问题,请告诉我什么是...

Container 死了

Vaadin 8 不再有 ContainerVaadin data model has been largely simplified. Basically, there is no data model anymore. There are just data providers for the various elements. What you want to look into is DataProvider, as it largely replaces Container

更改的简短介绍如下:https://vaadin.com/blog/-/blogs/vaadin-framework-8-comes-with-java-8-native-apis

通常,对于大多数用途,您将直接使用 setItems 或使用 ListDataProvider

万岁Container

为了简化将现有 Vaadin 7 应用程序迁移到 Vaadin 8 的过程,您可以使用 Vaadin 7 兼容层。这包括 old Vaadin data modelContainer。迁移到 Vaadin 8,同时对现有代码库进行极少更改。

参见:

如前所述:容器不再存在。

您可以直接在 UI 元素处设置项目,如

grid.setItems(books);

这将在底层创建一个 ListDataProvider。

如果您想将项目 (add/remove) 更改为 UI 元素而不重新设置项目,那么您可以像这样自己创建 ListDataProvider:

List<Book> data = new Arraylist<>(getBooks());
ListDataProvider<Book> dataProvider = new ListDataProvider<>(data);
Grid<Book> grid = new Grid<>();
grid.setDataProvider(dataProvider);

如果您稍后想处理您刚刚在列表中处理的项目

data.add(newBook);

并致电

dataProvider.refreshAll();

dataProvider.refreshItem(book);

如果项目的属性发生变化,您可能需要调用

grid.markAsDirty();

以便网格从项目中获取新数据。