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

网友投稿 254 2023-04-09


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

效果图:支持多级菜单。

菜单实体类:

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

// ... 省去getter和setter方法以及toString方法

}

菜单一般需要排序,我们根据Menu的order字段进行排序:

/*

* 排序,根据order排序

*/

public Comparator

Comparator

@Override

public int compare(Menu o1, Menu o2) {

if(o1.getOrder() != o2.getOrder()){

return o1.getOrder() - o2.getOrder();

}

return 0;

}

};

return comparator;

}

生成树的方法:

public Map findTree(){

Map data = new HashMap();

try {//查询所有菜单

List

//根节点

List

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

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

analLMjs * @param allMenu 所有菜单列表

* @return 每个根节点下,所有子菜单列表

*/

public List

//子菜单

List

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

}

return childList;

}

最后返回的JSON串如下:

{

"success": "true",

"list": [

{

"id": "1",

"name": "java",

"parentid": "0",

"url": "http://aliouchen.com",

"order": 1,

"children": [

{

"id": "2",

"name": "并发编程",

"parentid": "1",

"url": "http://aliouchen.com",

"order": 1,

"children": []

},

{

"id": "3",

"name": "多线程",

"parentid": "1",

"url": "http://aliouchen.com",

"order": 2,

"children": [

"id": "4",

"name": "Thread",

"parentid": "3",

"url": "http://aliouchen.com",

"order": 1,

          "children":[]

]

}

]

},

{

"id": "5",

"name": "python",

"parentid": analLMJS"0",

"url": "http://aliouchen.com",

"order": 2,

"children": []

}

]

}

总结

以上所述是给大家介绍的Java构建树形菜单的实例代码(支持多级菜单),希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微服务API网关(搭建微服务API网关)
下一篇:WebService接口开发(开发WebService接口)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~