可以将实现RouterLayout的类也定义为@Route

时间:2019-03-30 21:34:55

标签: java vaadin-flow vaadin10

我正在学习Vaadin Flow(Vaadin v10),并且对Route(作为注释的@Route)和RouterLayout的概念感到困难。

从我已经阅读过的文档中 Vaadin's website!我找不到特定问题的答案。

能否将实现RouterLayout的类也定义为@Route?

@Route("")
public class MainLayout extends Div implements RouterLayout {
}

请(如果可能)提供一些文档的参考。据我了解,RouterLayout旨在呈现其中的视图。因此,如有必要,public void showRouterLayoutContent(HasElement content)方法可以被覆盖以进行所需的布局创建。因此,放置本质上定义视图的@Route注释与RouterLayout混合没有意义吗?

是吗?如果RouterLayout可以与@Route注释一起使用,则表明布局也是一个视图;有人可以给我提供一个简单的方案吗?

1 个答案:

答案 0 :(得分:0)

就像您说的那样-从概念上讲,@RouteRouterLayout都在同一个类上似乎很奇怪。 @Route批注放置在叶节点上。您可以有一个独立的@Route,该元素将放置在<body>元素中,也可以有一个嵌套布局,其中路由显示在一个或多个父布局中。父布局可以使用注释的第二个参数指定,例如

@Route(value = "users", layout = Dashboard.class)
public class Users extends Div {
//...

,其中Dashboard需要实现RouterLayout。因此,您将使用http://server-address-here/users访问此路由,并且它将在Users中显示Dashboard

如果您想使用更具描述性的URL,可以在@RoutePrefix上使用Dashboard注释来实现:

@RoutePrefix("dashboard")
public class Dashboard extends VerticalLayout implements RouterLayout { 
// ...

现在您将从Users进入http://server-address-here/dashboard/users视图,而其他情况将保持不变。