当我们试图从登录导航到主页时,有人能告诉我为什么会收到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
字段