如何解决Vaadin 最佳方法:将对象状态更改分发给其他组件
我正在处理一个 WebApp (Vaadin19) 并且现在陷入了一个问题,即如何共享从一个组件到另一个组件的对象状态更改。在两个或多个组件中有一个对象实例。在一个组件中更改对象的属性并返回到另一个组件后,我想查看更改后的属性。
让我解释一下我的意思:
- 有一个包含一些数据行的网格。网格仅显示数据的一个子集,以确保清晰。
- 单击网格可在“阅读模式”下打开详细视图。数据是结构化的(包含子对象本身)。
- 单击“阅读模式”视图会打开一个带有选项卡的对话框。激活的选项卡取决于之前单击的子对象。
更改子对象中的元素并关闭对话框后,我希望 UI 重新加载/重新验证其内容。我认为很明显,我在那里使用了相同的对象实例。
是否有我必须提交给 UI 的事件?
或者: 最好的方法是什么?
解决方法
实际刷新很简单:theGrid.getDataProvider().refreshAll()
或 refreshItem
,如果您有权访问已更改的项目并且它具有良好的 equals
和 {{1} 实现}.
如何连接起来以便对话框通知网格实际上取决于您的架构。
- 如果它们在代码中已经很接近了,那么你可以例如在实例字段中存储对 Grid 的引用,并在对话框处理程序中引用该引用。
- 如果您想解耦,那么您需要某种事件总线。只要确保事件保持在 UI 范围内,就可以使用常规的 Spring 事件机制。或者,您可以使用
hashCode
和ComponentUtil::addListener
来使用例如ComponentUtil::fireEvent
作为一个简单的事件总线。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。