• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Java构建树形菜单(包括多级菜单)的实例代码

java 搞代码 4年前 (2022-01-09) 16次浏览 已收录 0个评论

这篇文章主要介绍了Java构建树形菜单的实例代码(支持多级菜单),非常不错,具有参考借鉴价值,需要的朋友可以参考下

效果图:支持多级菜单。

菜单实体类:

public class Menu {  // 菜单id  private String id;  // 菜单名称  private String name;  // 父菜单id  private Str<b style="color:transparent">来&源gao@dai!ma.com搞$代^码%网</b>ing 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.gaodaima.com",    "order": 1,    "children": [     {       "id": "2",       "name": "并发编程",       "parentid": "1",       "url": "http://www.gaodaima.com",       "order": 1,       "children": []     },     {       "id": "3",       "name": "多线程",       "parentid": "1",       "url": "http://www.gaodaima.com",       "order": 2,       "children": [         "id": "4",         "name": "Thread",         "parentid": "3",         "url": "http://www.gaodaima.com",         "order": 1,          "children":[]       ]     }    ]   },   {    "id": "5",    "name": "Python",    "parentid": "0",    "url": "http://www.gaodaima.com",    "order": 2,    "children": []   }  ]}

以上就是Java构建树形菜单(包括多级菜单)的实例代码的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Java构建树形菜单(包括多级菜单)的实例代码

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址