在 vaadin 的扩展视图中添加其他内容

Add additional content in extended view in vaadin

如果我制作了导航器并在其中添加视图:

n = new navigator(.....);

并制作两个视图,其中 view2 扩展了 view1。

然后做另一件事:

n.addView("view1", View1.class);
n.addView("view2", View2.class);

如何在 view2 中添加其他组件,如标签、表格或垂直布局等?

答案在 Vaadin 书中: https://vaadin.com/book/vaadin7/-/page/advanced.navigator.html 但我也在这里强调了一些代码部分:

设置导航

public class MyUI extends UI {
    @Override
    protected void init(VaadinRequest request) {
    // Create a navigator to control the views
    navigator = new Navigator(this, this);

    // Create and register the views
    navigator.addView("", new StartView());
    navigator.addView(MAINVIEW, new MainView());
}

实现视图

"Views can be any objects that implement the View interface."

public class StartView extends VerticalLayout implements View {
    public StartView() {
        setSizeFull();

        Button button = new Button("Go to Main View",
                new Button.ClickListener() {
            @Override
            public void buttonClick(ClickEvent event) {
                navigator.navigateTo(MAINVIEW);
            }
        });
        addComponent(button);
        setComponentAlignment(button, Alignment.MIDDLE_CENTER);
    }        

    @Override
    public void enter(ViewChangeEvent event) {
        Notification.show("Welcome to the Animal Farm");
    }
}

代码来自Vaadin Book。

请注意视图是常规的 class。它有特殊的方法 entry() ,在每个视图条目之后调用。您可以在 class 构造函数中创建所有组件、布局等(例如上面的示例:addComponent(button))。

如果您想导航到任何已注册的视图(通过调用方法 addView("viewName", ...) 和视图名称进行注册),您只需调用 navigateTo("viewName")。导航器有两种获取方式:

getUI().getNavigator().navigateTo("viewName");

UI.getCurrent().getNavigator().navigateTo("viewName");

我希望这是可以理解的。

编辑:

考虑一个简单的例子:

public class View1 extends VerticalLayout implements View {
    protected Label hello = new Label("Hello");
    private Button button = new Button("Click me");

    public View1() {
        addComponent(hello);
        addComponent(button);
    }

    public Button getButton() {
        return button;
    }
}

public class View2 extends View1 {
    private Button button2 = new Button("Don't click me");

    public View2() {
        hello.setValue("Hello world");
        getButton().setIcon(...);  
        addComponent(button2);
    }
}

不幸的是,现在我无法测试任何代码,所以上面的代码只是想法。

所以这是你需要的吗?还是我误解了你的问题?