package com.example.ui; import org.springframework.beans.factory.annotation.Autowired; import com.example.view.DefaultView; import com.example.view.UIScopedView; import com.example.view.ViewDisplayPanel; import com.example.view.ViewScopedView; import com.vaadin.server.VaadinRequest; import com.vaadin.spring.annotation.SpringUI; import com.vaadin.ui.Button; import com.vaadin.ui.CssLayout; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; abstract class AbstractSpringUI extends UI { @Autowired private ViewDisplayPanel springViewDisplay; protected CssLayout navigationBar; @Override protected void init(VaadinRequest request) { final VerticalLayout root = new VerticalLayout(); root.setSizeFull(); root.setMargin(true); root.setSpacing(true); setContent(root); navigationBar = new CssLayout(); navigationBar.addStyleName(ValoTheme.LAYOUT_COMPONENT_GROUP); navigationBar.addComponent( createNavigationButton("Default View", DefaultView.VIEW_NAME)); navigationBar.addComponent(createNavigationButton("UI Scoped View", UIScopedView.VIEW_NAME)); navigationBar.addComponent(createNavigationButton("View Scoped View", ViewScopedView.VIEW_NAME)); root.addComponent(navigationBar); root.addComponent(springViewDisplay); root.setExpandRatio(springViewDisplay, 1.0f); } private Button createNavigationButton(String caption, final String viewName) { Button button = new Button(caption); button.setId(viewName + "-button"); button.addStyleName(ValoTheme.BUTTON_SMALL); button.addClickListener( event -> getUI().getNavigator().navigateTo(viewName)); return button; } }