UI 中处理实体
视图中加载的实体会自动与视图中的组件关联,例如 数据容器 和 DataContext。这种关联是由于数据容器和 DataContext
会注册响应实体属性变更的监听器。如果将加载的实体传递给服务层进行修改和保存,则需要将实体和视图组件做一个隔离。否则,服务层对实体的改动会直接影响视图的状态。此外,如果实体保存在缓存中还会有内存泄露的风险。
当在 UI 中使用 DataManager
保存实体时,DataContext
的标准实现中提供了对需要保存实体的隔离。通过 io.jmix.core.Copier
bean 实现。
当需要将实体从视图发送给服务时,也可以做同样的隔离。下面的示例展示了如何通过服务保存实体:
@ViewComponent
private DataContext dataContext;
@Autowired
private DepartmentService departmentService;
@Autowired
private Copier copier;
private void saveToCustomService(Department entity) {
Department entityCopy = copier.copy(entity); (1)
Department savedEntity = departmentService.saveEntity(entityCopy); (2)
Department ignored = dataContext.merge(savedEntity);(3)
}
java
1 | 复制实体,将需要保存的实体和视图中展示的实体进行分隔。 |
2 | 将复制的实体发给服务。 |
3 | 如果需要使用服务中对实体的改动更新视图状态,可以将返回的实体合并到 DataContext 中。示例中 merge() 方法的结果可以忽略掉。 |
当使用 saveDelegate 处理方法拦截标准的
|
参阅 the 使用自定义服务保存实体 的在线示例,了解如何在服务层和视图之间隔离实体。 |
本页是否有帮助?
感谢您的反馈