【发布时间】:2017-08-27 08:31:09
【问题描述】:
我想在同一个窗口标签中显示不同的页面。我使用类 Empty 和 Empty1。 Empty 类是一个主页,视图 Empty1 被加载到 Empty 中。
名为 Empty 的类:
@Theme("valo")
@SpringUI(path = "empty")
public class Empty extends UI {
@Autowired
private SpringViewProvider viewProvider;
@Override
protected void init(VaadinRequest request) {
System.out.println("init Empty");
final VerticalLayout root = new VerticalLayout();
root.setSizeFull();
setContent(root);
Navigator navigator = new Navigator(this, this);
navigator.addProvider(viewProvider);
navigator.navigateTo(Empty1.VIEW_NAME);
}
}
和名为 Empty1 的类(视图):
@SpringView(name = Empty1.VIEW_NAME)
public class Empty1 extends VerticalLayout implements View {
public static final String VIEW_NAME = "empty1";
@PostConstruct
void init() {
addComponent(new Label("This is the default view"));
System.out.println("init Empty1");
}
@Override
public void enter(ViewChangeListener.ViewChangeEvent event) {
// the view is constructed in the init() method()
}
}
当我打开新窗口时,我看到“这是默认视图”这句话,没关系。 但是当我查看 trackstace 时,我注意到句子“init Empty1”显示了两次,为什么?
表示视图 Empty1 的内容被加载了两次。 我希望视图只加载一次。
在 'Empty' 类中,最终效果应该是这样的:
@Theme("valo")
@SpringUI(path = "empty")
public class Empty extends UI {
@Autowired
private SpringViewProvider viewProvider;
@Override
protected void init(VaadinRequest request) {
System.out.println("init Empty");
final VerticalLayout root = new VerticalLayout();
root.setSizeFull();
setContent(root);
Navigator navigator = new Navigator(this, this);
navigator.addProvider(viewProvider);
int optionAuto = 2;
switch (optionAuto) {
case 1:
getUI().getNavigator().navigateTo(Empty1.VIEW_NAME);
break;
case 2:
getUI().getNavigator().navigateTo(Empty2.VIEW_NAME);
break;
}
}
}
它可以工作,但视图“Empty1”或“Empty2”被调用了两次。如何修改代码以使视图只被调用一次?
【问题讨论】:
标签: java spring navigation vaadin