【问题标题】:Searching best practice for passing data between vaadin UIs [closed]搜索在 vaadin UI 之间传递数据的最佳实践 [关闭]
【发布时间】:2019-06-18 06:57:12
【问题描述】:

我是 vaadin 的新手,我正在尝试使用 SQL Server 中的数据构建一个包含多个页面的 Web 应用程序。感谢我对几个 StackOverflow 主题的研究,我可以让第一页工作,在网格中显示我的 Person 实体的一些基本数据。

现在,当我在网格中选择一条记录并单击一个按钮时,我想打开第二个页面并使用所选人员的 ID (person.getId()) 将其他数据从后端加载到 FormLayout(在本案例联系方式)。

目前,我已让我的应用程序打开第二页,但没有数据。我的第二页有@Route("/contact") 注释,我在第一页中使用ui.navigate("/contact") 导航到第二页。

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

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

目前,我的第二个页面加载,但与 NullPointerException 崩溃,因为 selectedPerson 变量为空,我不明白如何使用 Blackboard Listener 使用从事件中检索到的人员数据刷新 UI。

我现在真的不知道该怎么做。

【问题讨论】:

  • 我强烈建议您在进一步实施您的应用程序之前通读Documentation 页面。我相信您在阅读它时也会了解其他最佳实践。您正在寻找的是HasUrlParameter interface

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


【解决方案1】:

我建议您将人的 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);
        }
    }

【讨论】:

  • 谢谢,这解决了我的问题。我也听从了上面 Kaspar Scherrer 的建议,并在晚上再次详细阅读了文档。在接下来的几天里,我将继续阅读整个文档,以便在接下来的实施步骤之前获得更好的理论理解。
  • 听起来是个不错的计划!最近添加了对文档发表评论的功能(通过每页底部的Start a discussion),所以如果您阅读的内容不清楚,请不要犹豫,发表评论:)
猜你喜欢
  • 2011-03-13
  • 2023-03-30
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
相关资源
最近更新 更多