如何在 vaadin 14 中重置应用程序布局?
How do I reset the App Layout in vaadin 14?
我在 vaadin 14 中使用 App Layout 组件,并将 /admin
路由设置为我的默认视图。我设置了一个选项卡组件来切换这些视图的主要区域内容。它工作得很好,但是,我不知道如何将 /admin
路由重置为其初始状态。我尝试设置一个锚点以转到“/admin”,但它刷新了页面。
主视图
@Route("admin")
public class MainView extends AppLayout {
@Autowired
public MainView() {
setPrimarySection(AppLayout.Section.DRAWER);
addToDrawer(createMenuTabs());
setContent(customView);
}
private static Tabs createMenuTabs() {
final Tabs tabs = new Tabs();
tabs.setOrientation(Tabs.Orientation.VERTICAL);
tabs.add(getAvailableTabs());
return tabs;
}
private static Tab[] getAvailableTabs() {
final List<Tab> tabs = new ArrayList<>(2);
tabs.add(createTab(VaadinIcon.HOME, "Home", CustomView.class));
tabs.add(createTab(VaadinIcon.EDIT, "Events", EventsView.class));
return tabs.toArray(new Tab[tabs.size()]);
}
private static Tab createTab(VaadinIcon icon, String title,
Class<? extends Component> viewClass) {
return createTab(populateLink(new RouterLink(null, viewClass), icon, title));
}
private static Tab createTab(Component content) {
final Tab tab = new Tab();
tab.add(content);
return tab;
}
private static <T extends HasComponents> T populateLink(T a, VaadinIcon icon, String title) {
a.add(icon.create());
a.add(title);
return a;
}
}
我让它工作的唯一方法是向自定义视图添加路由。
自定义视图
@Route(value = "admin/home", layout = MainView.class)
public class CustomView extends VerticalLayout...
但这会将 url 更改为 .../admin/home
。
我只想回到 /admin
而不刷新。我希望我只是在文档中遗漏了一些简单的东西。
我最终通过给我的 MainView 一个 @RoutePrefix("admin")
而不是 @Route
来解决这个问题,然后在我的 "home" 视图中查看 @Route("")
路线。这种方式不会重新加载或重置应用程序,而只是回到主页 URL 而无需刷新。
我在 vaadin 14 中使用 App Layout 组件,并将 /admin
路由设置为我的默认视图。我设置了一个选项卡组件来切换这些视图的主要区域内容。它工作得很好,但是,我不知道如何将 /admin
路由重置为其初始状态。我尝试设置一个锚点以转到“/admin”,但它刷新了页面。
主视图
@Route("admin")
public class MainView extends AppLayout {
@Autowired
public MainView() {
setPrimarySection(AppLayout.Section.DRAWER);
addToDrawer(createMenuTabs());
setContent(customView);
}
private static Tabs createMenuTabs() {
final Tabs tabs = new Tabs();
tabs.setOrientation(Tabs.Orientation.VERTICAL);
tabs.add(getAvailableTabs());
return tabs;
}
private static Tab[] getAvailableTabs() {
final List<Tab> tabs = new ArrayList<>(2);
tabs.add(createTab(VaadinIcon.HOME, "Home", CustomView.class));
tabs.add(createTab(VaadinIcon.EDIT, "Events", EventsView.class));
return tabs.toArray(new Tab[tabs.size()]);
}
private static Tab createTab(VaadinIcon icon, String title,
Class<? extends Component> viewClass) {
return createTab(populateLink(new RouterLink(null, viewClass), icon, title));
}
private static Tab createTab(Component content) {
final Tab tab = new Tab();
tab.add(content);
return tab;
}
private static <T extends HasComponents> T populateLink(T a, VaadinIcon icon, String title) {
a.add(icon.create());
a.add(title);
return a;
}
}
我让它工作的唯一方法是向自定义视图添加路由。
自定义视图
@Route(value = "admin/home", layout = MainView.class)
public class CustomView extends VerticalLayout...
但这会将 url 更改为 .../admin/home
。
我只想回到 /admin
而不刷新。我希望我只是在文档中遗漏了一些简单的东西。
我最终通过给我的 MainView 一个 @RoutePrefix("admin")
而不是 @Route
来解决这个问题,然后在我的 "home" 视图中查看 @Route("")
路线。这种方式不会重新加载或重置应用程序,而只是回到主页 URL 而无需刷新。