我尝试使用Vaadin实现网站,但我不知道我是否了解Vaadin UI和视图完全错误。我要实现的是为网站定义一个基础模板,并在基础模板中显示不同的视图。
我的第一种方法是在UI中定义基本模板,并在不同视图中定义内容(通过导航器加载)。这是否可能,或者我是否完全理解Vaadin UI和视图的概念?如果可能的话,我应该如何正确实施呢?
我的第一种方法是以下示例。但是,导航器中加载的视图会替换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 ... */
}
}
最佳答案
这是一个正确的方法。但是导航器将替换rootLayout
的内容,因此也许最好传递一些布局,该布局位于rootLayout内部。如果您有更复杂的设置(例如,显示登录视图“全屏”),则可能需要编写自己的ViewDisplay
实现,以解决此问题(通过Navigator
的ctor传递)。