1、在上一篇中使用layui的tree,不灵活,它只对一个父节点起作用,加入想要多个父节点呢?在后端查询出来的是null的或者是没有数据,但是数据库中有含有数据,原因只是后端写的太硬了,不灵活。把它修改掉,保持原来的效果不变,改后端代码
2、改动前的效果:图:
在未加入的父节点,一切正常:
加入后的:
只查询最后一个节点!
3.对后端代码修改:上代码!
需要两个个工具类;一个是TypeNode ;一个是TypeTreeUtil
TypeNode:跟原来实体类一样
TypeTreeUtil:对节点拼接,有层级关系
TypeNode代码:提供get和set方法
TypeNode是为了不破坏原来的实体类,才创建出多一个,
public class TypeNode {
private Integer id;
private Integer pid;
private String title;
private Boolean spread = true; // 是否展开
private List<TypeNode> children;
}
TypeTreeUtil代码:
public class TypeTreeUtil {
/***
* 构建菜单层级
* @param treeList //菜单列表
* @param pid //父级菜单编号
* @return
*/
public static List<TypeNode> toTree(List<TypeNode> treeList, Integer pid) {
List<TypeNode> retList = new ArrayList<TypeNode>();
for (TypeNode parent : treeList) {
if (pid == parent.getPid()) {
retList.add(findChildren(parent, treeList));
}
}
return retList;
}
private static TypeNode findChildren(TypeNode parent, List<TypeNode> treeList) {
for (TypeNode child : treeList) {
if (parent.getId() == child.getPid()) {
if (parent.getChildren() == null) {
parent.setChildren(new ArrayList<>());
}
parent.getChildren().add(findChildren(child, treeList));
}
}
return parent;
}
}
4.Controller方法,其他service ,Impl,mapper,都是一样,查询全部数据
public Object typeList(){
//创建map集合,保存菜单信息
Map<String,Object> map = new ListHashMap<String,Object>();
List<SYS_Typeof> List = typeService.findByTypeList();
//创建集合,保存菜单关系
List<TypeNode> list =new ArrayList<>();
for(SYS_Typeof ty:List){
TypeNode t1 = new TypeNode();
t1.setId(ty.getId());
t1.setPid(ty.getPid());
t1.setTitle(ty.getTitle());
list.add(t1);
}
map.put("data", TypeTreeUtil.toTree(list,null));
return JSON.toJSONString(map);
}
5.JSP数据返回
6.效果图