本文来源
本文来自官网Vaadin app layout
介绍
Web应用程序可以针对各种各样的受众。在我们的例子中,我假设一个用于支持公司内部流程的Web应用程序。这是一个典型的业务应用程序,几乎每个开发人员都可以看到它。此领域的Web界面通常基于经典桌面应用程序的体验。
最低要求
在我们的最小版本中,我们假设应用程序标题中将有一个菜单。菜单条目的数量限制为四到五个,因此对屏幕没有挑战。当然,假设使用的术语比某些德语单词略短,例如“Gleisschotterrbettungsreinigungsmaschine”。
布局
Web应用程序布局是一个框架,其中包含菜单标题和视图槽。在这里,我们第一次遇到挑战,导航不应该替换整个窗口的内容,只能替换显示视图的区域。下图说明了结构。
视图显示在标记为“产品”的区域中。
基本结构
这里使用的基本框架基于Vaadin的App Layout组件。App Layout使用RouterLayout处理路由。从Vaadin的AppLayout开始,我们将创建一个名为MainLayout的类,扩展AbstractAppRouterLayout类。
如果您使用以下依赖项,则组件应用程序布局已在类路径中可用。
1 2 3 4
| <dependency> <groupId>com.vaadin</groupId> <artifactId>vaadin</artifactId> </dependency>
|
如果不是,则相应的maven依赖关系是
1 2 3 4
| <dependency> <groupId>com.vaadin</groupId> <artifactId>vaadin-app-layout-flow</artifactId> </dependency>
|
要实现的方法名称为configure,需要两个参数。第一个是生成的AppLayout的实例,第二个是AppLayout中使用的菜单。基于这两个实例,您可以从设计开始。除了放置在左上角的徽标外,您还可以设置菜单项。使用类AppLayoutMenuItem的实例创建菜单项本身。可以选择不同的组合。例如,可以使用图标加上描述和导航目标,或者使用ActionListener而不是导航目标的定义。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| public class MainLayout extends AbstractAppRouterLayout {
private static final String LOGO_PNG = "logo.png";
public static final String ITM_DASHBOARD = "mainview.menue.item.dashboard"; public static final String ITM_PROFILE = "mainview.menue.item.profile"; public static final String ITM_TRENDS = "mainview.menue.item.trends"; public static final String ITM_LOGOUT = "mainview.menue.item.logout";
@Override protected void configure(AppLayout appLayout , AppLayoutMenu appLayoutMenu) {
StreamResource res = new StreamResource(LOGO_PNG , () -> MainView.class.getResourceAsStream("/" + LOGO_PNG)); Image img = new Image(res , "Vaadin Logo");
img.setHeight("44px"); appLayout.setBranding(img);
appLayoutMenu .addMenuItems( new AppLayoutMenuItem(DASHBOARD.create() , appLayout.getTranslation(ITM_DASHBOARD) , DashboardView.NAV) , new AppLayoutMenuItem(USER.create() , appLayout.getTranslation(ITM_PROFILE) , ProfileView.NAV) , new AppLayoutMenuItem(TRENDING_UP.create() , appLayout.getTranslation(ITM_TRENDS) , TrendsView.NAV) , new AppLayoutMenuItem(SIGN_OUT.create() , appLayout.getTranslation(ITM_LOGOUT) , e -> { UI ui = UI.getCurrent(); VaadinSession session = ui.getSession(); session.setAttribute(SecurityService.User.class , null); session.close(); ui.navigate(MainView.class); })); } }
|
此示例使用Flow的I18Provider。要了解更多相关信息,我建议使用有关Flow国际化的教程
要立即使用布局,必须将具有类MainLayout的属性布局分配给@Route注释中的参与视图。
1 2 3 4 5 6 7 8
| @Route(value = MainView.NAV_MAIN_VIEW, layout = MainLayout.class) public class MainView extends Composite<Div> implements HasLogger { public static final String NAV_MAIN_VIEW = "main";
public MainView() { getContent().add(new Span("Page content")); } }
|
摘要
我们现在有一个简单的应用程序框架,具有当今典型的结构。功能是有限的,但有时这是足够的。但是,如果您想要更广泛的选项,可以在Vaadin目录中查看替代方案或使用功能更全面的Business App启动器。我将在本系列的下一部分中仔细研究其他几个。