我尝试使用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传递)。

09-10 03:32