搜索在vaadin UI之间传递数据的最佳实践

时间:2019-06-18 06:57:12

标签: java sql-server spring vaadin vaadin-flow

我是vaadin的新手,我正在尝试使用来自SQL Server的数据来构建具有多个页面的Web应用程序。多亏了我对StackOverflow几个主题的研究,我才能获得第一页的工作,在网格中显示了Person实体的一些基本数据。

现在,当我在网格中选择一个记录并单击一个按钮时,我想打开第二页并使用所选人员(person.getId())的ID将其他数据从后端加载到FormLayout (在这种情况下为联系信息)。

此刻,我已经使我的应用程序打开了第二页,但是没有数据。我的第二页带有@Route("/contact")批注,我在第一页中使用ui.navigate("/contact")导航到第二页。

昨天,我花了几个小时阅读有关Blackboard EventBus的信息,以便在页面之间传递数据。我得到一个简单的示例,其中第一页触发了一个人事件,第二页侦听了这些事件并显示带有System.out.println()的人。但是,如何使用此事件/人员数据刷新第二个vaadin页面?就像在Blackboard代码示例中一样,我的Blackboard Bus是静态的。

如前所述,我想选择一个人,然后导航到另一个页面以加载该人的其他信息。如果用户导航回到第一页并选择另一个人,再次单击该按钮导航到第二页,则第二页应刷新并显示新选择的人的数据。

此刻,我的第二个页面已加载,但由于{PearlyPerson变量为空,并且不了解如何使用Blackboard Listener刷新事件中检索到的人员数据来显示UI而导致NullPointerException崩溃。

我现在真的不知道如何进行。

1 个答案:

答案 0 :(得分:4)

我建议您改为传递此人的ID作为参数。像这样(未经测试的代码)

FirstView

button.addClickListener(event -> {
    ui.navigate(ContactPage.class, selectedPerson.getId());
}

然后是另一页

@Route("contact")
public class ContactPage extends ... implements HasUrlParameter<Long> {
...
    @Override
    public void setParameter(BeforeEvent event, Long parameter) {
        if (parameter != null) {
            // Load additional info
        } else {
            Notfication.show("Blablabla");
            // Or
            event.rerouteToError(someError);
        }
    }