Передавать и получать данные в Vaadin 8

У меня есть мнение:

@SpringUI(path = "order")
@Title("order")
public class OrderGUI extends UI{

и я бы передал параметр другому:

@SpringUI(path = "orderNumber")
@Title("Order number")
public class GetOrderNumber extends UI {

Я попытался отправить параметр (orderNumber) по:

getUI().getPage().setUriFragment(orderNumber);
getUI().getPage().setLocation("orderNumber");

затем он переходит к /orderNumber, но при попытке его поймать:

String fragment = getPage().getUriFragment();

но

System.out.println("Fragment: " + fragment);

говорит, что Fragment: null

Как отправить параметр из одного представления Vaadin в другое?

@Редактировать Это близко к работе. Я изменил свой вид на:

@SpringView(name = "GetOrderNumber")
@Title("Order number")
public class GetOrderNumber extends VerticalLayout implements View {

а в @SpringUI сделал getUI().getNavigator().navigateTo("GetOrderNumber/" + orderNumber); на самом деле он все еще бросает java.lang.IllegalArgumentException: Trying to navigate to an unknown state '' and an error view provider not present, но работает. Я имею в виду все время, когда я иду на localhost: 8080 / заказываю

@SpringUI(path = "order")
public class OrderGUI extends UI {

выдает ошибку, но затем работает должным образом - перейдите к просмотру и передайте параметр правильно. Понятия не имею, почему navigator = new Navigator(this, this); вызывает ошибку

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
432
1

Ответы 1

Аннотация @SpringUI всегда определяет только имя представления, это не то место, где вы указываете параметр URI, правильное место - это метод navigateTo (..), например:

getUI().getNavigator().navigateTo("myview/someparameter");

Дополнительная информация о дополнении Vaadin и Spring здесь.

https://vaadin.com/docs/v8/framework/advanced/advanced-spring.html

Первый выстрел - поменял на getUI().getNavigator().navigateTo("orderNumber/" + orderNumber); и получил java.lang.NullPointerException: null

Michu93 15.04.2018 15:16

Даже не странно, если у меня нет объекта класса Navigator

Michu93 15.04.2018 15:35

Да, сначала нужно настроить навигатор. Обычно вы делаете это в основном классе пользовательского интерфейса в небольших приложениях или в mainview / layout / любом другом классе в более крупных приложениях. Документация навигатора находится здесь: vaadin.com/docs/v8/framework/advanced/advanced-navigator.htm‌ l

Tatu Lund 15.04.2018 15:38

Также обратите внимание, что представления должны быть аннотированы @SpringView и расширять интерфейс com.vaadin.navigator.View, тогда как пример кода здесь использует аннотацию @SpringUI и расширяет класс com.vaadin.ui.UI. Обычно в каждом приложении должен быть только один класс UI, но несколько классов View.

Leif Åstrand 16.04.2018 08:50

Я следил за документацией, связанной с @TatuLund, и, поскольку я добавляю navigator = new Navigator(this, this); navigator.addView("", new GetOrderNumber());, мой сайт пуст. Это почему? @Edit на самом деле navigator.addView("", new GetOrderNumber()); делает мой сайт пустым

Michu93 19.04.2018 12:01

@ Michu93 Если вы хотите передать номер заказа в представление в качестве параметра, вы не должны указывать его в методе addView (..). Вместо этого вы должны сделать это так navigator.addView ("myview"); navigator.navigateTo ("myview /" + GetOrderNumber ());

Tatu Lund 20.04.2018 07:48

@ Michu93 Извините, я думал, что GetOrderNumber () является получателем для вашего параметра, но потом я заметил, что это представление. Вы должны зарегистрировать свое представление с помощью этого синтаксиса: navigator.addView ("myview", GetOrderNumber.class); И когда вы переходите к «myview» и передаете ему параметр, вы делаете это с помощью navigator.navigateTo («myview /» + orderNumber);

Tatu Lund 20.04.2018 07:57

GetOrderNumber - такое глупое имя для класса. При добавлении navigator = new Navigator(this, this); navigator.addView("myview", GetOrderNumber.class); сразу выкидывает java.lang.IllegalArgumentException: Trying to navigate to an unknown state '' and an error view provider not present

Michu93 21.04.2018 09:19

На самом деле navigator = new Navigator(this, this); выдает исключение java.lang.IllegalArgumentException.

Michu93 21.04.2018 10:01

Вы добавили navigator.navigateTo ("myview"); вызов? Если у вас нет зарегистрированного представления с именем "", вы получите исключение. Итак, вам нужно добавить навигацию в представление по умолчанию.

Tatu Lund 22.04.2018 18:06

Другие вопросы по теме