Vaadin 14 重新路由

Vaadin 14 re-routing

我正在开发 Vaadin 14 应用程序。我希望用户能够转到某个 URL 并根据特定条件重新路由到具有自己路由的多个视图之一。

我知道如何使用 BeforeEnterHandler / BeforeEnterObserver 重新路由。但这仅适用于中断到已知路线的导航,据我所知需要链接到 class 实现 Component 要么使用 @Route 作为该 class 或动态注册。这是否意味着我需要使用此路由创建一个虚拟 Component 实现,它永远不会显示,只是为了能够在 BeforeEnterHandler 中重新路由?或者是否有一些更简洁的方法来挂钩路由生命周期并在查找相应的视图组件之前重新路由?

更新: 我写这个问题时考虑到了重新路由,但我发现我将使用转发来代替,因为 forwardTo 也会更新浏览器 URL,这就是我想要的。但是问题仍然是一样的,因为我仍然需要一条能够转发到另一条路线的路线。

更新二: 由于我需要向目标视图提供查询参数,所以我什至无法使用 forwardToUI.navigate 在导航期间调用时显然无法正常工作,因此我需要处理 AfterNavigationEvent 并在那里调用 UI.navigate。这意味着此时导航已经完成,所以我的路线肯定需要 Component 作为导航目标。这两个问题(如果不创建虚拟 UI 组件就无法进行路由处理,并且 forwardTo 不接受查询参数)似乎是 Vaadin 框架路由支持的基本缺点。

在我看来,使用 route 是最干净的方式,它符合框架中的概念——任何(在 Vaadin 中)“听” URL 是一条路线。您可以使用 @Route 定义路由,或者如果有帮助,您可以使用 RouteConfiguration 动态注册它们。另一种选择是使用 Servlet 重定向到所需的视图,但我不认为那样更干净。