我尝试用Vaadin实现一个网站,但我不知道我是否理解Vaadin UI和Views完全错误。我想要实现的是为我的网站定义一个基本模板,并在我的基本模板中显示不同的视图。
我的第一种方法是在UI中定义基本模板,在不同的视图中定义内容(通过导航器加载)。这是可能的还是我得到了Vaadin UI和Views的概念完全错了?如果这是可能的,我应该如何正确实现它?
我的第一种方法是以下样本。但是使用Navigator加载的视图会从UI中替换完整的基本模板...我错了什么?
public class MyUI extends UI {
private Layout rootLayout;
@Override
protected void init(VaadinRequest request) {
buildBaseTemplate();
Navigator navigator = new Navigator(this, rootLayout);
}
private void buildBaseTemplate() {
rootLayout = new CssLayout();
/* ... my base template ... */
}
}
public class MyFirstView implements View {
@Override
public void enter(ViewChangeListener.ViewChangeEvent event) {
buildView();
}
private void buildView() {
/* ... my view definition ... */
}
}
答案 0 :(得分:1)
这是一种正确的方法。但导航器将替换rootLayout
的内容,所以也许你最好通过一些布局,这是在你的rootLayout内。如果您有更复杂的设置(例如,显示登录视图“全屏”),您可能需要编写自己的ViewDisplay
实现,处理此问题(通过Navigator
的ctor传递。)