java - Vaadin 最佳方法:将对象状态更改分发给其他组件
问题描述
我正在处理一个 WebApp (Vaadin19),现在陷入了一个问题,即如何共享从一个组件到另一个组件的对象状态更改。两个或多个组件中存在一个对象实例。在一个组件中更改对象的属性并返回到另一个组件后,我想查看更改后的属性。
让我解释一下,我的意思是:
- 有一个带有一些数据行的网格。为了清晰起见,网格仅显示数据的一个子集。
- 单击网格以“阅读模式”打开详细视图。数据是结构化的(包含子对象本身)。
- 单击“阅读模式”-视图会打开一个带有选项卡的对话框。激活的选项卡取决于之前单击的子对象。
更改子对象中的元素并关闭对话框后,我希望 UI 将重新加载/重新验证其内容。我认为很明显,我在那里使用了相同的对象实例。
是否有我必须提交给 UI 的事件?
或者:最好的方法是什么?
解决方案
实际的刷新很简单:theGrid.getDataProvider().refreshAll()
,或者refreshItem
如果您有权访问已更改的项目并且它具有良好的equals
and实现hashCode
。
如何连接事物以便对话框通知网格实际上取决于您的体系结构。
- 如果它们在代码中已经彼此接近,那么您可以例如在实例字段中存储对 Grid 的引用,然后在对话框处理程序中引用它。
- 如果你想解耦,那么你需要某种事件总线。只要确保事件保持在 UI 范围内,就可以使用常规 Spring 事件机制。或者,您可以使用
ComponentUtil::addListener
和ComponentUtil::fireEvent
用作UI.getCurrent
简单的事件总线。
推荐阅读
- php - 未找到列:1054 'where 子句'中的未知列
- c# - 如何让简单的 UInt16 算法起作用?
- javascript - 页面刷新JQuery时设置活动类?
- python - 如何将venv中的python代码与s3连接
- javascript - use-supercluster 获取空数组
- mysql - MySQL:将尾随零添加到每一行
- python - OpenCV - 使用凸包和自适应阈值在手指上绘制轮廓
- python - 如何使用specfile将单个python文件(文件锁)集成到pyinstaller?
- python - 从 Heroku 中提取数据库但无法处理数据
- javascript - core-js 包很大(使用 62kB)