我从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);
如果对于经验丰富的人来说这似乎不是问题,请告诉我什么是......
答案 0 :(得分:9)
Container
已经死了 Vaadin 8不再拥有Container
。 Vaadin 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 model和Container
。移动到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();
以便网格从项目中获取新数据。