Что-то заменило BeanItemContainer в Vaadin 8?

Я скачал копию примера проекта vaadin-charts-video с GitHub (https://github.com/vaadin-miki/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? И если да, то чем?

Например, см. строку 54 документа https://github.com/vaadin-miki/vaadin-charts-video/blob/master/intro-video/src/main/java/org/vaadin/miki/диаграммы/вступление/IntroChartsUI.java BeanItemContainer<BookPrice> container = new BeanItemContainer<>(BookPrice.class, prices);

И если это не кажется проблемой для более опытных глаз, пожалуйста, дайте мне знать, что...


person justinb    schedule 23.05.2017    source источник


Ответы (2)


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, внеся при этом очень мало изменений в существующую кодовую базу.

Видеть:

person Piotr Wilkin    schedule 23.05.2017

Как уже было правильно сказано: Контейнера больше нет.

Вы можете напрямую установить элементы в элементе пользовательского интерфейса, например

grid.setItems(books);

Это создаст ListDataProvider под прикрытием.

Если вы хотите изменить элементы (добавить/удалить) в элемент пользовательского интерфейса, не устанавливая элементы заново, вы можете самостоятельно создать 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();

or

dataProvider.refreshItem(book);

Если атрибуты элементов изменились, вам, вероятно, нужно вызвать

grid.markAsDirty();

чтобы сетка извлекала новые данные из элементов.

person Mihael    schedule 24.05.2017