java实现构造无限层级树形菜单
发布时间:2020-05-25 06:33:44 所属栏目:Java 来源:互联网
导读:这里来讲一下后台java如何构造多叉树,这样前台就可接收到数据递归构造树形菜单了。
|
这里来讲一下后台java如何构造多叉树,这样前台就可接收到数据递归构造树形菜单了。 我们来理一下如何实现构造多叉树的逻辑吧,其实整个问题概括起来就是 1、构造一个实体类,用来存储节点,所以我们构造的需要四个对象(id,pid,name,和chirenList) 2、构造菜单结构 3、构造子菜单,如此循环,通过pid判断上级菜单 具体实现: 1、这里构造Tree.java实体类
package com.tcl.jr.crm.entity;
/**
* 类名称:Tree
* 类描述:树形结构
*/
public class Tree {
private String id;
private String pId;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getpId() {
return pId;
}
public void setpId(String pId) {
this.pId = pId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Tree [id=" + id + ",pId=" + pId + ",name=" + name + "]";
}
}
2、封装树形结构类,这里我封装成一个通用的工具类,方便项目中使用,MenuTreeUtil.java,完整代码如下,可直接复制使用:
package com.tcl.jr.crm.util;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.tcl.jr.crm.entity.Tree;
/**
* 类名称:MenuTreeUtil
* 类描述:递归构造树型结构
*/
public class MenuTreeUtil {
public static Map<String,Object> mapArray = new LinkedHashMap<String,Object>();
public List<Tree> menuCommon;
public List<Object> list = new ArrayList<Object>();
public List<Object> menuList(List<Tree> menu){
this.menuCommon = menu;
for (Tree x : menu) {
Map<String,Object> mapArr = new LinkedHashMap<String,Object>();
if(x.getpId()=="0"){
mapArr.put("id",x.getId());
mapArr.put("name",x.getName());
mapArr.put("pid",x.getpId());
mapArr.put("childList",menuChild(x.getId()));
list.add(mapArr);
}
}
return list;
}
public List<?> menuChild(String id){
List<Object> lists = new ArrayList<Object>();
for(Tree a:menuCommon){
Map<String,Object> childArray = new LinkedHashMap<String,Object>();
if(a.getpId() == id){
childArray.put("id",a.getId());
childArray.put("name",a.getName());
childArray.put("pid",a.getpId());
childArray.put("childList",menuChild(a.getId()));
lists.add(childArray);
}
}
return lists;
}
}
3、最后在控制台请求方法调用数据就行了,在controller的方法如下:
/**
* 显示APP树形结构
*/
@RequestMapping(value = { "getAPPTree" },produces = "text/html;charset=UTF-8")
@ResponseBody
public String getAPPTree(HttpServletRequest request,HttpServletResponse response) throws Exception {
Map<String,Object> returnmap = new HashMap<>();
MenuTreeUtil menuTree = new MenuTreeUtil();
PageData pd = this.getPageData();
try {
//这里的方法是根据前台的机构类型代码来查找数据库数据的,这里不多加解释,因人而异
List<Tree> list = dataDicService.buildTree(pd.getString("instType"));
List<Object> menuList = menuTree.menuList(list);
//区别于web端,这边APP端list不能转为json格式,直接将list传给前台,转成json对象的话vuejs前台无法识别渲染
returnmap.put("list",menuList);
} catch (Exception e) {
logger.error(e.getMessage());
}
return JsonMapper.toJsonString(returnmap);
}
4、然后前台ajax调用第三部的接口方法就而已请求到所需的数据,如何渲染成好的前台页面,参照我另一篇文章:vuejs使用递归组件实现树形目录 java构造树形菜单数据就说到这里啦,希望对大家有帮助,我的分享一般都是特别详细的,除了涉及项目隐私之外,是不会对大家有所保留的哟,也希望大家多多支持编程小技巧。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Java 调用 MySQL 存储过程并获得返回值
- Java注解机制之Spring自动装配实现原理详解
- Java中==运算符与equals方法的区别及intern方法详解
- java – JVM(64位1.5.0._22)在GCTaskThread崩溃
- Java transient 关键字详解及实例代码
- 角括号内的问号的含义是什么?扩展java.lang.Comparable
- java – jpa criteriabuilder upper给出了编译错误
- 使用Java流将Java列表转换为另一个
- Spring Cloud Feign组件实例解析
- java – 当使用非泛型方法覆盖泛型方法时,为什么subsignatu
