view - 如何在 Vaadin v8 中的视图之间导航?
问题描述
当我们尝试从登录导航到主页时,有人可以告诉我为什么我收到 NullPointerException。
登录页面有一个指向 HomePage 的 NavigaeTO 方法,如下所示
public class MyUI extends UI implements View {
Navigator navigator;
@Override
protected void init(VaadinRequest vaadinRequest) {
final VerticalLayout vlayout = new VerticalLayout();
final TextField name1 = new TextField();
name1.setCaption("Username");
final TextField name2 = new TextField();
name2.setCaption("Password");
final HorizontalLayout hlaylout1 = new HorizontalLayout();
Button button1 = new Button("Login",
new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
System.out.print("Here is the View String "+NavigatorUI.HOMEVIEW);
getNavigator().navigateTo(NavigatorUI.HOMEVIEW);
}
});
Button button2 = new Button("Cancel");
hlaylout1.addComponents(button1, button2);
vlayout.addComponents(name1,name2, hlaylout1);
setContent(vlayout);
}
@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
public static class MyUIServlet extends VaadinServlet {
}
}
单击登录按钮时应打开的主页是
public class HomeView extends UI implements View {
Navigator navigator;
@Override
protected void init(VaadinRequest vaadinRequest) {
final VerticalLayout vlayout = new VerticalLayout();
final TextField name1 = new TextField();
name1.setCaption("HomePage");
vlayout.addComponents(name1);
setContent(vlayout);
}
@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
public static class MyUIServlet extends VaadinServlet {
}
}
Navigator 类是
public class NavigatorUI extends UI {
Navigator navigator;
public static final String HOMEVIEW = "HOMEVIEW";
@Override
protected void init(VaadinRequest request) {
getPage().setTitle("Navigation Example");
// Create a navigator to control the views
navigator = new Navigator(this, this);
// Create and register the views
navigator.addView(HOMEVIEW, new HomeView());
navigator.addView("", new MyUI());
// navigator.addView(MAINVIEW, new MainView());
}
}
我收到 NavigateTo 方法的 NullPointerException。有人可以让我知道问题是什么吗?
解决方案
您的代码中有几个问题:
- 你定义多个servlet,一个就够了
- 您所有的视图都扩展 UI,只有
NavigatorUI
应该扩展 UI,其他视图可以在构造函数中构建布局 - 您的 servlet 配置为使用
MyUI
,但它应该NavigatorUI
用于该 UI - 您应该覆盖
getNavigator()
inNavigatorUI
以返回新创建的导航器,或调用setNavigator(navigator)
. - 您应该
Navigator navigator
从视图中删除该字段。