java实现构造无限层级树形菜单
这里来讲一下后台java如何构造多叉树,这样前台就可接收到数据递归构造树形菜单了。
我们来理一下如何实现构造多叉树的逻辑吧,其实整个问题概括起来就是
1、构造一个实体类,用来存储节点,所以我们构造的需要四个对象(id,pid,name,和chirenList)
2、构造菜单结构
3、构造子菜单,如此循环,通过pid判断上级菜单
具体实现:
1、这里构造Tree.java实体类
packagecom.tcl.jr.crm.entity;
/**
*类名称:Tree
*类描述:树形结构
*/
publicclassTree{
privateStringid;
privateStringpId;
privateStringname;
publicStringgetId(){
returnid;
}
publicvoidsetId(Stringid){
this.id=id;
}
publicStringgetpId(){
returnpId;
}
publicvoidsetpId(StringpId){
this.pId=pId;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
@Override
publicStringtoString(){
return"Tree[id="+id+",pId="+pId+",name="+name+"]";
}
}
2、封装树形结构类,这里我封装成一个通用的工具类,方便项目中使用,MenuTreeUtil.java,完整代码如下,可直接复制使用:
packagecom.tcl.jr.crm.util;
importjava.util.ArrayList;
importjava.util.LinkedHashMap;
importjava.util.List;
importjava.util.Map;
importcom.tcl.jr.crm.entity.Tree;
/**
*类名称:MenuTreeUtil
*类描述:递归构造树型结构
*/
publicclassMenuTreeUtil{
publicstaticMapmapArray=newLinkedHashMap();
publicListmenuCommon;
publicList
3、最后在控制台请求方法调用数据就行了,在controller的方法如下:
/**
*显示APP树形结构
*/
@RequestMapping(value={"getAPPTree"},produces="text/html;charset=UTF-8")
@ResponseBody
publicStringgetAPPTree(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{
Mapreturnmap=newHashMap<>();
MenuTreeUtilmenuTree=newMenuTreeUtil();
PageDatapd=this.getPageData();
try{
//这里的方法是根据前台的机构类型代码来查找数据库数据的,这里不多加解释,因人而异
Listlist=dataDicService.buildTree(pd.getString("instType"));
ListmenuList=menuTree.menuList(list);
//区别于web端,这边APP端list不能转为json格式,直接将list传给前台,转成json对象的话vuejs前台无法识别渲染
returnmap.put("list",menuList);
}catch(Exceptione){
logger.error(e.getMessage());
}
returnJsonMapper.toJsonString(returnmap);
}
4、然后前台ajax调用第三部的接口方法就而已请求到所需的数据,如何渲染成好的前台页面,参照我另一篇文章:vuejs使用递归组件实现树形目录
java构造树形菜单数据就说到这里啦,希望对大家有帮助,我的分享一般都是特别详细的,除了涉及项目隐私之外,是不会对大家有所保留的哟,也希望大家多多支持毛票票。