首页 > 解决方案 > Vaadin 最佳方法:将对象状态更改分发给其他组件

问题描述

我正在处理一个 WebApp (Vaadin19),现在陷入了一个问题,即如何共享从一个组件到另一个组件的对象状态更改。两个或多个组件中存在一个对象实例。在一个组件中更改对象的属性并返回到另一个组件后,我想查看更改后的属性。

让我解释一下,我的意思是:

  1. 有一个带有一些数据行的网格。为了清晰起见,网格仅显示数据的一个子集。
  2. 单击网格以“阅读模式”打开详细视图。数据是结构化的(包含子对象本身)。
  3. 单击“阅读模式”-视图会打开一个带有选项卡的对话框。激活的选项卡取决于之前单击的子对象。

更改子对象中的元素并关闭对话框后,我希望 UI 将重新加载/重新验证其内容。我认为很明显,我在那里使用了相同的对象实例。

是否有我必须提交给 UI 的事件?

或者:最好的方法是什么?

标签: javaspring-mvcspring-datavaadin

解决方案


实际的刷新很简单:theGrid.getDataProvider().refreshAll(),或者refreshItem如果您有权访问已更改的项目并且它具有良好的equalsand实现hashCode

如何连接事物以便对话框通知网格实际上取决于您的体系结构。

  • 如果它们在代码中已经彼此接近,那么您可以例如在实例字段中存储对 Grid 的引用,然后在对话框处理程序中引用它。
  • 如果你想解耦,那么你需要某种事件总线。只要确保事件保持在 UI 范围内,就可以使用常规 Spring 事件机制。或者,您可以使用ComponentUtil::addListenerComponentUtil::fireEvent用作UI.getCurrent简单的事件总线。

推荐阅读