TreeAction
TreeDataAction接口
部分数据容器和控件需要树形数据,典型例如Tree、SyncTree 、CascadeList 、CascadeModelSelect 等。这些数据容器在获取数据时需要实现特殊的 TreeDataAction 接口,实现其方法,方法包括如下,详情见TreeDataAction接口。
| 接口 | 方法描述 |
|---|---|
| TreeDataResult | 按父级 id 和其它参数获取子级数据返回,对应前端数据容器点击节点前[+]展开数据时使用。 |
| TreeSearchResult | 按给定条件模糊查询整颗树,返回查询结果,查询结果只需包含记录 ID 和显示名。 |
| TreeDataResult | 用指定节点的父节点 id 重新构建树,需要包含指定节点和它的兄弟节点,以及祖先链上所有节点和祖先链上节点的兄弟节点。 |
| TreeDataResult | 根据一组 id 查询节点,用于树形控件编辑态下回显数据。 |
实现示例
@Componentpublic class ExampleTreeAction implements TreeDataAction<Department, Long> {
//作用于父节点点击[+]展开子级数据时,返回子级数据;需要注意由于此处无分页,如果单级数据量非常大时,建议不要使用树形交互方式 public TreeDataResult<Department> loadChildren(@Nullable Long parentId, TreeDataParams params) { List<Department> result = new ArrayList<>();
if (parentId == null) { Department department = new Department(); department.setId(1L); department.setName("一级部门"); result.add(department); } else { Department parent = new Department(); parent.setId(1L); parent.setName("一级部门");
Department d1 = new Department(); d1.setId(11L); d1.setParent(parent); d1.setName("二级部门-研发部");
Department d2 = new Department(); d2.setId(12L); d2.setParent(parent); d2.setName("二级部门-产品部");
result.add(d1); result.add(d2); }
return new TreeDataResult<>(result); }
//用于树形容器和控件的搜索框提示。需返回模糊搜索的前几条结果,建议不超过十条。返回数据仅需包含 id 和显示名。 public TreeSearchResult<Long> search(TreeDataParams params) { List<TreeItem<Long>> result = new ArrayList<>();
TreeItem<Long> t1 = new TreeItem<>(); t1.setId(11L); t1.setDisplayName("一级部门/二级部门-研发部");
TreeItem<Long> t2 = new TreeItem<>(); t2.setId(12L); t2.setDisplayName("一级部门/二级部门-产品部");
result.add(t1); result.add(t2);
return new TreeSearchResult<>(result); }
/** * 一般和 search 方法配套使用,用于从一条特定数据反向构建树,以便树形容器能正常展示数据。 * 反向构建需要包含该条数据本身;该条数据的兄弟节点数据;该条数据的祖先链和祖先链上每个节点的兄弟节点数据。 * 数据无需按树形进行组织,只需全部平铺为 List 即可。但需要保证每条数据都带有给定的 parentId 字段。Trantor 前端数据容器将根据返回数据组织成树。 * * @param parentId 上一级ID * @param params 其他相关参数 * @return 返回数据结果集 */ public TreeDataResult<Department> reverseBuild(@Nullable Long parentId, TreeDataParams params) { List<Department> result = new ArrayList<>(); Department department = new Department(); department.setId(1L); department.setName("一级部门"); result.add(department);
Department d1 = new Department(); d1.setId(11L); d1.setParent(department); d1.setName("二级部门-研发部");
Department d2 = new Department(); d2.setId(12L); d2.setParent(department); d2.setName("二级部门-产品部");
result.add(d1); result.add(d2); return new TreeDataResult<>(result); }
//方法用于树控件的数据回填 public TreeDataResult<Department> loadByIds(List<Long> longs, TreeDataParams params) { List<Department> result = new ArrayList<>();
Department d1 = new Department(); d1.setId(11L); d1.setName("一级部门/二级部门-研发部");
Department d2 = new Department(); d2.setId(12L); d2.setName("一级部门/二级部门-产品部");
result.add(d1); result.add(d2); return new TreeDataResult<>(result); }}