如何在Vaadin v8中的视图之间导航



当我们试图从登录导航到主页时,有人能告诉我为什么会收到NullPointerException吗。

登录页面的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,但要使用该UI,它应该是NavigatorUI
  • 您应该覆盖NavigatorUI中的getNavigator()以返回新创建的导航器,或者调用setNavigator(navigator)
  • 您应该从视图中删除Navigator navigator字段

最新更新