【问题标题】:Vaadin Flow Redirect to Specific Route on Page ReloadVaadin 流重定向到页面重新加载时的特定路由
【发布时间】:2021-05-27 13:53:14
【问题描述】:

我正在使用 Vaadin Flow。我面临一个问题,在我导航到一条路线后,如果我重新加载页面,我仍然会登陆同一页面(我想这是它应该工作的方式)。我希望在重新加载时重定向到特定路线。诸如捕获重新加载事件并重定向到特定路由。

例如。

http://localhost:9090/user - 我目前所在的当前路线。

http://localhost:9090/ - 我需要在重新加载页面时导航到的路线。

提前致谢。

【问题讨论】:

    标签: routes vaadin reload vaadin-flow


    【解决方案1】:

    你的问题不是很清楚你是否只是想要

    a) 别名或

    b) 创建一个只显示一次的视图,然后将用户重定向到其他位置。

    对于别名,有一个使用@RouteAlias 注释的非常简单的解决方案。这使得向视图中添加多条路线成为可能。

    @Route(value = "", layout = MainLayout.class)
    @RouteAlias(value = "main", layout = MainLayout.class)
    public class MainView extends VerticalLayout {
        ...
    }
    

    对于第二种情况,我将研究BeforeEnterEvent,它在导航期间触发并有助于重定向(请参阅:https://vaadin.com/docs/v14/flow/routing/tutorial-routing-lifecycle)。您还需要@PreserveOnRefresh,否则将创建新的视图实例并且计数将始终为零。

    @PreserveOnRefresh
    @Route(value = "", layout = MainLayout.class)
    public class MainView extends VerticalLayout implements BeforeEnterObserver {
    
        private int count = 0;
    
        @Override
        public void beforeEnter(BeforeEnterEvent event) {
            if (count > 0) {
                event.forwardTo(OtherView.class);
            }
            count++;
        }
    }
    

    如果您希望将导航限制到该视图,以便它只能通过您的应用程序而不是通过直接链接(或刷新)发生,那么您可以使用BeforeEnterObserver 并检查NavigationTrigger 来完成此操作。

    直接通过 URL 导航或刷新浏览器选项卡时为PAGE_LOAD,使用RouterLink 时为ROUTER_LINK,使用UI#navigate 时为UI_NAVIGATE

    请注意,即使您尚未创建路由器链接,用户也可以在浏览器中创建路由器链接,因此您不应依赖它来确保安全。

    @Route
    public class ExampleView extends VerticalLayout implements BeforeEnterObserver {
    
        public ExampleView() {
            add("Hello");
        }
    
        @Override
        public void beforeEnter(BeforeEnterEvent beforeEnterEvent) {
            if (beforeEnterEvent.getTrigger() == NavigationTrigger.PAGE_LOAD) {
                beforeEnterEvent.rerouteTo(MainView.class);
            }
        }
    }
    

    【讨论】:

    • 感谢@PreserveOnRefresh 解决了我的问题。
    猜你喜欢
    • 2021-12-16
    • 2020-02-15
    • 2021-07-18
    • 2016-07-07
    • 2020-09-10
    • 2020-06-15
    • 1970-01-01
    • 2014-11-01
    • 2020-03-02
    相关资源
    最近更新 更多