在 Vaadin Flow 中的路由之间传递自定义对象

Pass Custom Object between routes in Vaadin Flow

我正在 Vaadin Flow 14 中开发一个具有页面单独视图的应用程序。一个是创建,另一个是查看。

Create 是通常的表单样式,这很好。查看页面是我正在使用 Vaadin Grid 呈现保存的数据作为 API 调用的一部分。因此,我只打算使用带有路由名称的单个页面作为所有视图页面请求的视图,并根据特定页面标识符执行 api 调用。我的疑问是,当从我的主页单击视图图标时,我如何将参数或 pojo 对象传递到我的视图路由。我想输入前可以提供帮助,但不确定编码或是否可能。

提前致谢。

My doubt is that how could I pass a parameter

传递参数最直接的方法是使用 url 参数。以下伪代码粗略地显示了该模式。您自然也可以将 bean 缓存到会话属性或 SessionScoped bean 存储,以避免在用户倾向于刷新此视图时从数据库中重复获取。

@Route(value = "myroute", layout = MainLayout.class)
public class MyRoute implements HasUrlParameter<Integer>, AfterNavigationObserver {

    private Integer key;

    public MyRoute() {
        ... setup things like the form and binder ...
    }

    @Override
    public void afterNavigation(AfterNavigationEvent event) {
       if (key != null) {
          Bean bean = service.fetchBean(key);
       }
       binder.readBean(bean); // populate form with bean
    }

    @Override
    public void setParameter(BeforeEvent event,
            @OptionalParameter Integer parameter) {
        key = parameter;
    }
}

关于路由器的更多信息:https://vaadin.com/learn/training/v14-router 文档:https://vaadin.com/docs/v14/flow/routing/tutorial-routing-url-generation#navigation-target-with-hasurlparameter

您可以像这样在导航中使用参数

getUI().ifPresent(ui -> ui.navigate(MyRoute.class, key));