У меня есть мнение:
@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); вызывает ошибку




Аннотация @SpringUI всегда определяет только имя представления, это не то место, где вы указываете параметр URI, правильное место - это метод navigateTo (..), например:
getUI().getNavigator().navigateTo("myview/someparameter");
Дополнительная информация о дополнении Vaadin и Spring здесь.
https://vaadin.com/docs/v8/framework/advanced/advanced-spring.html
Даже не странно, если у меня нет объекта класса Navigator
Да, сначала нужно настроить навигатор. Обычно вы делаете это в основном классе пользовательского интерфейса в небольших приложениях или в mainview / layout / любом другом классе в более крупных приложениях. Документация навигатора находится здесь: vaadin.com/docs/v8/framework/advanced/advanced-navigator.htm l
Также обратите внимание, что представления должны быть аннотированы @SpringView и расширять интерфейс com.vaadin.navigator.View, тогда как пример кода здесь использует аннотацию @SpringUI и расширяет класс com.vaadin.ui.UI. Обычно в каждом приложении должен быть только один класс UI, но несколько классов View.
Я следил за документацией, связанной с @TatuLund, и, поскольку я добавляю navigator = new Navigator(this, this); navigator.addView("", new GetOrderNumber());, мой сайт пуст. Это почему? @Edit на самом деле navigator.addView("", new GetOrderNumber()); делает мой сайт пустым
@ Michu93 Если вы хотите передать номер заказа в представление в качестве параметра, вы не должны указывать его в методе addView (..). Вместо этого вы должны сделать это так navigator.addView ("myview"); navigator.navigateTo ("myview /" + GetOrderNumber ());
@ Michu93 Извините, я думал, что GetOrderNumber () является получателем для вашего параметра, но потом я заметил, что это представление. Вы должны зарегистрировать свое представление с помощью этого синтаксиса: navigator.addView ("myview", GetOrderNumber.class); И когда вы переходите к «myview» и передаете ему параметр, вы делаете это с помощью navigator.navigateTo («myview /» + orderNumber);
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
На самом деле navigator = new Navigator(this, this); выдает исключение java.lang.IllegalArgumentException.
Вы добавили navigator.navigateTo ("myview"); вызов? Если у вас нет зарегистрированного представления с именем "", вы получите исключение. Итак, вам нужно добавить навигацию в представление по умолчанию.
Первый выстрел - поменял на
getUI().getNavigator().navigateTo("orderNumber/" + orderNumber);и получилjava.lang.NullPointerException: null