You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加新项时DataProvider未自动刷新,如何解决?

问题原因

你当前的DataProvider是基于数据库查询返回的静态集合快照创建的。DataProvider.ofCollection(technologyList)只会绑定传入的集合实例,当你新增数据到数据库后,内存里的technologyList并没有同步更新新数据,调用refreshAll()只是通知组件重新渲染现有集合的内容,自然看不到新添加的项。而修改现有项时refreshItem(item)有效,是因为你修改的是集合中已存在的对象实例,组件能感知到实例的变化。

解决方案

有两种常用的修复方式,根据你的业务场景选择:

方式一:维护动态可更新的底层集合

初始化时使用可修改的集合(比如ArrayList)创建ListDataProvider,新增数据时同时更新集合并通知刷新:

// 初始化阶段
List<Technology> technologyList = new ArrayList<>(technologyService.findAllTechnologies());
ListDataProvider<Technology> dataProvider = new ListDataProvider<>(technologyList);

// 新增数据保存后的逻辑
Technology newTech = // 从表单获取的新对象
technologyService.save(newTech); // 保存到数据库
dataProvider.getItems().add(newTech); // 将新对象添加到DataProvider的底层集合
dataProvider.refreshAll(); // 通知网格刷新

方式二:重新查询数据库并替换集合

如果不想维护内存中的集合,每次新增后重新查询数据库,替换DataProvider的数据源:

// 新增数据保存后的逻辑
technologyService.save(newTech); // 保存到数据库
List<Technology> updatedList = technologyService.findAllTechnologies(); // 重新查询
dataProvider.getItems().clear();
dataProvider.getItems().addAll(updatedList);
dataProvider.refreshAll();

额外提示

如果你的框架支持更高级的DataProvider实现(比如基于数据库查询的动态DataProvider),也可以直接使用这类实现,它会自动处理数据的增删改查同步,无需手动维护集合。

内容的提问来源于stack exchange,提问作者spozzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 10:05:30