routes - Vaadin Flow 在页面重新加载时重定向到特定路由

标签 routes vaadin reload vaadin-flow

我正在使用 Vaadin Flow。我遇到一个问题,在我导航到一条路线后,如果我重新加载页面,我仍然会停留在同一页面上(我想这应该是这样工作的)。我希望在重新加载时重定向到特定路线。类似于捕获重新加载事件并重定向到特定路由。

例如。

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

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

提前致谢。

最佳答案

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

a) 别名或

b) 创建一个只显示一次的 View ,然后将用户重定向到其他地方。

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

@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,否则将创建新的 View 实例并且计数将始终为零。

@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++;
    }
}

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

当直接通过 URL 导航或刷新浏览器选项卡时,它将是 PAGE_LOAD,当使用 RouterLinkUI_NAVIGATE 时,它将是 ROUTER_LINK 使用 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);
        }
    }
}

关于routes - Vaadin Flow 在页面重新加载时重定向到特定路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67723614/

相关文章:

node.js - swagger-ui-express 不同 API 文档的多个路由

node.js - 新的Vaadin 14应用程序无法运行,错误 "Failed to determine ' Node 的工具。“缺少Node.js和npm工具

java - Vaadin 7 中的动态 CSS 编辑

无需重启即可重新加载 Tomcat AccessLogValve 模式

jquery - HTML5 应用程序路由、pushState

kubernetes - Openshift重新加密TLS终止路由无效。应用程序不可用

model-view-controller - 在 MVC 中,如何根据 View 、模型和路由构建#Controller?

java - 使用 ProGuard 混淆 GWT Web 应用程序

java - 我怎样才能在java中实现像apache reload这样的东西?

swift - 进入前台时表reload.data