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

时间:2017-05-23 18:41:22

标签: java maven charts vaadin8

我从GitHub(https://github.com/vaadin-miki/vaadin-charts-video)下载了 vaadin-charts-video 示例项目的副本,以了解 Vaadin图表应该如何实施。然而,该项目以及我发现的大多数可用演示代码/项目似乎都是使用 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);

如果对于经验丰富的人来说这似乎不是问题,请告诉我什么是......

2 个答案:

答案 0 :(得分:9)

Container已经死了

Vaadin 8不再拥有ContainerVaadin data model已大致简化。基本上,没有数据模型了。只有各种元素的数据提供者。您要查看的内容是DataProvider,因为它在很大程度上取代了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,同时对现有代码库进行很少的更改。

请参阅:

答案 1 :(得分:4)

正如已经正确说过的那样:容器不再存在。

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

grid.setItems(books);

这将在封面下创建一个ListDataProvider。

如果您想要更改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();

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