5

我从 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的第 54 行.java BeanItemContainer<BookPrice> container = new BeanItemContainer<>(BookPrice.class, prices);

如果这似乎不是更有经验的眼睛的问题,请让我知道什么是......

4

2 回答 2

10

Container死了

Vaadin 8 不再具有Container. Vaadin 数据模型已大大简化。基本上,没有数据模型了。只有各种元素的数据提供者。您要研究的是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 兼容层。这包括旧的 Vaadin 数据模型Container. 迁移到 Vaadin 8,同时对现有代码库进行很少的更改。

看:

于 2017-05-23T18:51:30.583 回答
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();

这样网格将从项目中获取新数据。

于 2017-05-24T06:26:55.710 回答