在 Vaadin Flow 中的视图之间导航时调整 URL 查询参数
Adapting URL query parameters when navigating between views in Vaadin Flow
我很好奇:在以通用方式从一个视图导航到另一个视图时,是否可以更改 URL 查询参数?
我的用例是什么?当从视图 A 导航到视图 C 时,我想将查询参数 "referrer" 附加到 URL。从视图 B 导航到 C 时也应该这样做。一旦打开视图 C,就会有一些应该 return 到以前视图的操作。然后可以通过 "referrer" URL 查询参数确定此 "previous view" 信息。对于具体示例,这已经在起作用。
此外,我想在视图 类 上使用一些注释来生成行为。例如。视图 A 和 B 用我的 @ReferrerSource
注释,视图 C 用我的 @ReferrerTarget
注释。因此,每次在我的应用程序中进行导航时,我都想考虑这些视图注释并根据需要添加 "referrer" URL 查询参数。
这可能吗?
引荐源视图:
离开视图时,您可以使用方法 UI.getCurrent().navigate(String location, QueryParameters queryParameters)
.
或者,如果您使用 RouterLink
进行导航,您也可以在那里设置查询参数:routerLink.setQueryParameters(QueryParameters queryParameters)
.
这不是可以通过注释或接口完成的事情,因为它不能在任何类型的导航观察器中完成。最佳情况下,您应该能够将引荐来源查询参数添加到 BeforeLeaveEvent
,但我认为您还不能这样做(您可以从中获取查询参数,但不能在那里编辑它们)。
推荐人目标视图:
您可以从 referrer 目标视图中的 beforeEnterEvent 或 afterNavigationEvent 读取 url 参数。您可以存储在视图字段中的引用值,并在用户按下您的 "previous view" 按钮时使用它。我不确定你如何通过注释来完成它,但如果你愿意的话,它应该可以通过接口来实现。
@Override
public void afterNavigation(AfterNavigationEvent event) {
Map<String, List<String>> parameters = afterNavigationEvent.getLocation().getQueryParameters().getParameters();
// TODO: check parameters for your referrer parameter, and save it in the view
}
另一种可能的解决方案是单独保留 QueryParameters,并将先前的视图保存在 UI 范围内(就像您最近在 ;P 中建议的那样)。现在,从 Vaadin 14 开始,我真的不确定它是如何工作的,因为 UI 实例是在导航时重建的。但我确信有一个很好的解决方案,在 SO、vaadin 论坛和 vaadin github.
上可以找到很多关于这个主题的讨论
我很好奇:在以通用方式从一个视图导航到另一个视图时,是否可以更改 URL 查询参数?
我的用例是什么?当从视图 A 导航到视图 C 时,我想将查询参数 "referrer" 附加到 URL。从视图 B 导航到 C 时也应该这样做。一旦打开视图 C,就会有一些应该 return 到以前视图的操作。然后可以通过 "referrer" URL 查询参数确定此 "previous view" 信息。对于具体示例,这已经在起作用。
此外,我想在视图 类 上使用一些注释来生成行为。例如。视图 A 和 B 用我的 @ReferrerSource
注释,视图 C 用我的 @ReferrerTarget
注释。因此,每次在我的应用程序中进行导航时,我都想考虑这些视图注释并根据需要添加 "referrer" URL 查询参数。
这可能吗?
引荐源视图:
离开视图时,您可以使用方法 UI.getCurrent().navigate(String location, QueryParameters queryParameters)
.
或者,如果您使用 RouterLink
进行导航,您也可以在那里设置查询参数:routerLink.setQueryParameters(QueryParameters queryParameters)
.
这不是可以通过注释或接口完成的事情,因为它不能在任何类型的导航观察器中完成。最佳情况下,您应该能够将引荐来源查询参数添加到 BeforeLeaveEvent
,但我认为您还不能这样做(您可以从中获取查询参数,但不能在那里编辑它们)。
推荐人目标视图:
您可以从 referrer 目标视图中的 beforeEnterEvent 或 afterNavigationEvent 读取 url 参数。您可以存储在视图字段中的引用值,并在用户按下您的 "previous view" 按钮时使用它。我不确定你如何通过注释来完成它,但如果你愿意的话,它应该可以通过接口来实现。
@Override
public void afterNavigation(AfterNavigationEvent event) {
Map<String, List<String>> parameters = afterNavigationEvent.getLocation().getQueryParameters().getParameters();
// TODO: check parameters for your referrer parameter, and save it in the view
}
另一种可能的解决方案是单独保留 QueryParameters,并将先前的视图保存在 UI 范围内(就像您最近在