Java构建树形菜单的实例代码(支持多级菜单)
程序员文章站
2024-03-31 14:25:34
效果图:支持多级菜单。
菜单实体类:
public class menu {
// 菜单id
private string id;
//...
效果图:支持多级菜单。
菜单实体类:
public class menu { // 菜单id private string id; // 菜单名称 private string name; // 父菜单id private string parentid; // 菜单url private string url; // 菜单图标 private string icon; // 菜单顺序 private int order; // 子菜单 private list<menu> children; // ... 省去getter和setter方法以及tostring方法 }
菜单一般需要排序,我们根据menu的order字段进行排序:
/* * 排序,根据order排序 */ public comparator<menu> order(){ comparator<menu> comparator = new comparator<menu>() { @override public int compare(menu o1, menu o2) { if(o1.getorder() != o2.getorder()){ return o1.getorder() - o2.getorder(); } return 0; } }; return comparator; }
生成树的方法:
public map<string,object> findtree(){ map<string,object> data = new hashmap<string,object>(); try {//查询所有菜单 list<menu> allmenu = menudao.findtree(); //根节点 list<menu> rootmenu = new arraylist<menu>(); for (menu nav : allmenu) { if(nav.getparentid().equals("0")){//父节点是0的,为根节点。 rootmenu.add(nav); } } /* 根据menu类的order排序 */ collections.sort(rootmenu, order()); //为根菜单设置子菜单,getclild是递归调用的 for (menu nav : rootmenu) { /* 获取根节点下的所有子节点 使用getchild方法*/ list<menu> childlist = getchild(nav.getid(), allmenu); nav.setchildren(childlist);//给根节点设置子节点 } /** * 输出构建好的菜单数据。 * */ data.put("success", "true"); data.put("list", rootmenu); return data; } catch (exception e) { data.put("success", "false"); data.put("list", new arraylist()); return data; } }
获取子菜单:
/** * 获取子节点 * @param id 父节点id * @param allmenu 所有菜单列表 * @return 每个根节点下,所有子菜单列表 */ public list<menu> getchild(string id,list<menu> allmenu){ //子菜单 list<menu> childlist = new arraylist<menu>(); for (menu nav : allmenu) { // 遍历所有节点,将所有菜单的父id与传过来的根节点的id比较 //相等说明:为该根节点的子节点。 if(nav.parentid().equals(id)){ childlist.add(nav); } } //递归 for (menu nav : childlist) { nav.setchildren(getchild(nav.getid(), allmenu)); } collections.sort(childlist,order());//排序 //如果节点下没有子节点,返回一个空list(递归退出) if(childlist.size() == 0){ return new arraylist<menu>(); } return childlist; }
最后返回的json串如下:
{ "success": "true", "list": [ { "id": "1", "name": "java", "parentid": "0", "url": "http://www.aliouchen.com", "order": 1, "children": [ { "id": "2", "name": "并发编程", "parentid": "1", "url": "http://www.aliouchen.com", "order": 1, "children": [] }, { "id": "3", "name": "多线程", "parentid": "1", "url": "http://www.aliouchen.com", "order": 2, "children": [ "id": "4", "name": "thread", "parentid": "3", "url": "http://www.aliouchen.com", "order": 1, "children":[] ] } ] }, { "id": "5", "name": "python", "parentid": "0", "url": "http://www.aliouchen.com", "order": 2, "children": [] } ] }
总结
以上所述是小编给大家介绍的java构建树形菜单的实例代码(支持多级菜单),希望对大家有所帮助