在项目中用到导航树结构,所以就用递归写了一个遍历导航树的功能。
表结构:

-
/** -
* 递归获取菜单 -
* -
* @param roleKey -
* @param systemCode -
* @return -
*/ -
public String getSysMenuJson(String roleIds, String menu_pid) -
throws Exception { -
List<Map<String, Object>> list = null; -
if (roleIds == null || roleIds.equals("")) -
return null; -
String[] roles = roleIds.split(","); -
List<Map<String, Object>> dicList = new ArrayList<Map<String, Object>>(); -
//当前节点信息 -
//dicList = SysMenuListById(roleIds, menu_pid); -
//调用递归子集节点信息 -
getChridNavIds(roleIds, menu_pid, dicList); -
return JSONArray.fromObject(dicList).toString(); -
} -
/** -
* 递归获取系统导航菜单 -
* @param roleIds 角色iD -
* @param parentid 父级菜单ID -
* @param dicList -
*/ -
private void getChridNavIds(String roleIds, String parentid,List dicList){ -
List<Map<String, Object>> dataDictionaryList= SysMenuListByPid(roleIds, parentid); -
for(Map nav:dataDictionaryList){ -
List<Map<String, Object>> childList = new ArrayList<Map<String, Object>> (); -
if(nav!=null){ -
Map<String, Object> map = new HashMap<String, Object>();// 每个一级菜单对应的map -
map.put("id", NullHelper.convertNullToNothingnull(nav.get("menu_id"))); -
map.put("name", NullHelper.convertNullToNothingnull(nav.get("menu_name"))); -
String url = NullHelper.convertNullToNothingnull(nav.get("menu_url")); -
if(StringUtils.isNotBlank(url)){ -
map.put("url", url); -
} -
map.put("icon", NullHelper.convertNullToNothingnull(nav.get("menu_img"))); -
getChridNavIds(roleIds,nav.get("menu_id").toString(),childList); -
//将同级代码存入childList中 -
map.put("menuitem", childList); -
dicList.add(map); -
} -
} -
} -
/** -
* 用PID递归获取父级菜单的所有子集菜单 -
* @param roleIds -
* @param menu_pid -
* @param bResult -
* @return -
*/ -
private List<Map<String, Object>> SysMenuListByPid(String roleIds, String menu_pid) { -
StringBuffer menuSql = new StringBuffer(); -
menuSql.append("select m.menu_id,m.parent_menu_id,m.menu_name,m.menu_url,m.menu_img,m.is_treenode from sys_menu m "); -
menuSql.append("inner join sys_role_menu_rel rm on rm.menu_id=m.menu_id and m.parent_menu_id in ("+splitRoleId(menu_pid)+") and m.menu_state='1' and rm.role_id in ("+splitRoleId(roleIds)+") "); -
menuSql.append("where 1=1" + " group by m.menu_id,m.parent_menu_id,m.menu_name,m.menu_url,m.menu_img,m.is_treenode,m.menu_seq "); -
menuSql.append("order by m.menu_seq asc "); -
return jdbcTemplate.queryForList(menuSql.toString()); -
}
生成json串:
-
[ -
{ -
"id": "8a929b985da6b83f015da6bbe2620001", -
"icon": "s-n-t-icon5.png", -
"name": "制证管理", -
"menuitem": [ -
{ -
"id": "8a92e1475da5c3a3015da80915080007", -
"icon": "", -
"name": "证照生成", -
"menuitem": [ ], -
"url": "license/manageList" -
}, -
{ -
"id": "8a92e1475dbc8d86015dbc91ed990002", -
"icon": "", -
"name": "证照审核", -
"menuitem": [ ], -
"url": "storage/auditList" -
}, -
{ -
"id": "8a929cee5da76049015da764fd980001", -
"icon": "", -
"name": "制证签发", -
"menuitem": [ ], -
"url": "storage/signDataList" -
}, -
{ -
"id": "8a929cee5da76049015da7743ae600a0", -
"icon": "", -
"name": "打证管理", -
"menuitem": [ ], -
"url": "storage/printDataList" -
} -
], -
"url": "license/manageList" -
}, -
{ -
"id": "8a929b1a5da632c3015da6347edd0001", -
"icon": "s-n-t-icon2.png", -
"name": "证照维护", -
"menuitem": [ -
{ -
"id": "8a92e3fd5dea5abd015dea6e6f7b0001", -
"icon": "", -
"name": "证照年检", -
"menuitem": [ ], -
"url": "licensemaintain/licenseAnnualSurveyList" -
}, -
{ -
"id": "8a929b1a5da632c3015da6368e5a002b", -
"icon": "", -
"name": "证照变更", -
"menuitem": [ ], -
"url": "licensemaintain/licenseChangeList" -
}, -
{ -
"id": "297e4d0b5dbb4a09015dbc25eb7c0003", -
"icon": "", -
"name": "证照注销", -
"menuitem": [ ], -
"url": "licensemaintain/licensezhuxiao" -
}, -
{ -
"id": "297e4d0b5dbb4a09015dbc2defb700a4", -
"icon": "", -
"name": "证照作废", -
"menuitem": [ ], -
"url": "licensemaintain/licensezuofei" -
}, -
{ -
"id": "297e4d0b5dbb4a09015dbc3122e500f6", -
"icon": "", -
"name": "证照挂失", -
"menuitem": [ ], -
"url": "licensemaintain/licenseguashi" -
}, -
{ -
"id": "297e4d0b5dbb4a09015dbc32dbc60149", -
"icon": "", -
"name": "维护审核", -
"menuitem": [ ], -
"url": "licensemaintain/licenseshenhe" -
}, -
{ -
"id": "8a92e0f65dc5c003015dc5c58ca60001", -
"icon": "", -
"name": "版本管理", -
"menuitem": [ ], -
"url": "licensemaintain/versionManagement" -
}, -
{ -
"id": "8a92e0f65dc5c003015dc5c88df30002", -
"icon": "", -
"name": "有效期管理", -
"menuitem": [ ], -
"url": "licensemaintain/termOfValidityManagement" -
} -
] -
}, -
{ -
"id": "8a92e3165e177bec015e1786a9a20002", -
"icon": "s-n-t-icon1.png", -
"name": "证照查询", -
"menuitem": [ ], -
"url": "querylicenses/querManageList" -
} -
]
本文介绍了一种使用递归方法生成导航树JSON的方法。通过递归查询数据库获取菜单信息,并将其转换为JSON格式,用于前端展示。文章详细展示了递归函数及数据库查询逻辑。
7918

被折叠的 条评论
为什么被折叠?



