gpt4 book ai didi

java - 从 Vaadin 中的另一个 UI 刷新网格

转载 作者:行者123 更新时间:2023-12-01 22:34:04 27 4
gpt4 key购买 nike

我有一个主布局,其中包含另一个带有网格和按钮的 UI。该网格显示了我的数据库表的数据。使用该按钮,将打开一个向导,我可以在其中创建该数据库的新条目。当我通过单击按钮关闭向导时,我希望刷新网格以显示新添加的条目。一切正常,包括存储到我的数据库,除了网格的刷新。

所以我有用户界面

   public class MainLayout{
...
public void refreshGrid()
{
this.grid.getDataProvider().refreshAll();
}

}

我的网格是在哪里定义的。我已经实现了刷新方法。其中还有用于创建新条目的按钮。当我单击此按钮时,会调用下一个 UI。此 UI 包含向导的总体布局,带有选项卡栏。

public class WizardLayout{
}

在这些选项卡之一中,最终出现了带有用于创建条目的输入字段的 UI。还有将其保存到数据库的按钮。

public class CreateEntry{
...
private void button_onClick(ClickEvent<Button> event)
{
...
}
}

在此按钮单击方法中,实现了保存它的逻辑。之后我想从第一个 UI 调用刷新方法来刷新它。我该怎么做才能让它发挥作用?

请记住,其他一切都有效。所以我唯一的问题是刷新网格,因为它不会自动刷新。我必须单击浏览器中的刷新按钮才能使其正常工作。

最佳答案

首先请注意,虽然没有不正确,但您对术语 UI 的使用在 Vaadin 上下文中可能会令人困惑,因为它通常用于指 Vaadin UI 对象,其中每个选项卡通常有一个。 Vaadin UI 之间的通信比您的用例更复杂。

对此有很多解决方案,最简单的可能是将 MainLayout 实例传递给向导。

在这种情况下,这些类将紧密耦合,即两者相互依赖。

更好的方法是使用某种监听器或回调。这可能会变得非常复杂,但在最简单的情况下,您只需传递一个将在保存时运行的回调。

WizardLayout.java

private final Runnable saveCallback;

public WizardLayout(Runnable saveCallback) {
this.saveCallback = saveCallback;
}

private void button_onClick(ClickEvent<Button> event) {
...
saveCallback.run();
}

MainLayout.java

new WizardLayout(this::refreshGrid);

关于java - 从 Vaadin 中的另一个 UI 刷新网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58536253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com