java实现构造无限层级树形菜单
程序员文章站
2024-03-31 13:12:52
这里来讲一下后台java如何构造多叉树,这样前台就可接收到数据递归构造树形菜单了。
我们来理一下如何实现构造多叉树的逻辑吧,其实整个问题概括起来就是
1、构造一个实...
这里来讲一下后台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实现监听u盘示例分享
下一篇: java实现对服务器的自动巡检邮件通知