跳转到内容

TreeAction

TreeDataAction接口

部分数据容器和控件需要树形数据,典型例如Tree、SyncTree 、CascadeList 、CascadeModelSelect 等。这些数据容器在获取数据时需要实现特殊的 TreeDataAction 接口,实现其方法,方法包括如下,详情见TreeDataAction接口。

接口方法描述
TreeDataResult loadChildren(@Nullable ID parentId, TreeDataParams params);按父级 id 和其它参数获取子级数据返回,对应前端数据容器点击节点前[+]展开数据时使用。
TreeSearchResult search(TreeDataParams params);按给定条件模糊查询整颗树,返回查询结果,查询结果只需包含记录 ID 和显示名。
TreeDataResult reverseBuild(@Nullable ID parentId, TreeDataParams params);用指定节点的父节点 id 重新构建树,需要包含指定节点和它的兄弟节点,以及祖先链上所有节点和祖先链上节点的兄弟节点。
TreeDataResult loadByIds(List ids, TreeDataParams params);根据一组 id 查询节点,用于树形控件编辑态下回显数据。

实现示例

@Component
public 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);
}
}