二级菜单是每个javaweb项目中都会使用到的,今天总结下我这次的做法。
一级菜单的PARENT_ID均为0,二级菜单的PARENT_ID是一级菜单的MENU_ID,如下图所示:
我把一级菜单和二级菜单放到了一起,所以一条SQL没办法查询出嵌套的如下所示的格式,
"data": {
"sons": [
{
"MENU_TYPE": null,
"MENU_URL": null,
"MENU_KEY": null,
"MENU_ID": 6,
"MENU_STATE": null,
"MENU_NAME": "户籍信息",
"MENU_ORDER": "1",
"MENU_ICON": null,
"PARENT_ID": 1
}
],
"parentdata": {
"MENU_TYPE": null,
"MENU_URL": "#",
"MENU_KEY": null,
"MENU_ID": 1,
"MENU_STATE": null,
"MENU_NAME": "人口",
"MENU_ORDER": "1",
"MENU_ICON": null,
"PARENT_ID": 0
}
}
只能在java里面处理了,我使用到了PageData其实本质就是Map,使用到了双重for循环进行处理,代码如下:
@RequestMapping(value = "datamanager/menulist", produces = "application/json;charset=UTF-8")
@ResponseBody
public String yeardeathCount() {
List<PageData> list = null;
List<PageData> listparent=new ArrayList<>();
PageData datas=new PageData();
PageData pd = new PageData();
pd = this.getPageData();
try {
list = datamanagerService.listMenu(pd);//查询到一级菜单和二级菜单的集合
for(PageData pdata:list){
if(Integer.valueOf(pdata.get("PARENT_ID").toString())==0){//先将一级菜单装到一个集合
listparent.add(pdata);
}
}
for(int i=0;i<listparent.size();i++){//外层循环查一级菜单
PageData data=new PageData();
PageData parentdata=listparent.get(i);
List<PageData> sons=new ArrayList<>();//用来装二级菜单的集合
list.removeAll(listparent);//去除一级菜单只剩二级菜单
for(PageData pdata:list){
//将同属一级菜单的二级菜单装到一个集合中
if(Integer.valueOf(parentdata.get("MENU_ID").toString())==Integer.valueOf(pdata.get("PARENT_ID").toString())){
sons.add(pdata);
}else{
continue;
}
}//将一级菜单和二级菜单放到map中
data.put("parentdata",parentdata);
data.put("sons", sons);
datas.put("data"+i, data);
}
return JSONUtil.JsonString(new JsonResult( 1, "成功!", datas));
} catch (Exception e) {
// TODO: handle exception
logger.error("错误:" + e.toString(), e);
return JSONUtil.toJsonString(new JsonResult(-1, "失败:服务器内部错误!", null));
}
}
返回给前端的json如下:
{
"code": 1,
"message": "成功!",
"rows": {
"data4": {
"sons": [
{
"MENU_TYPE": null,
"MENU_URL": null,
"MENU_KEY": null,
"MENU_ID": 10,
"MENU_STATE": null,
"MENU_NAME": "地址点",
"MENU_ORDER": "1",
"MENU_ICON": null,
"PARENT_ID": 5
},
{
"MENU_TYPE": null,
"MENU_URL": null,
"MENU_KEY": null,
"MENU_ID": 11,
"MENU_STATE": null,
"MENU_NAME": "兴趣点",
"MENU_ORDER": "2",
"MENU_ICON": null,
"PARENT_ID": 5
},
{
"MENU_TYPE": null,
"MENU_URL": null,
"MENU_KEY": null,
"MENU_ID": 12,
"MENU_STATE": null,
"MENU_NAME": "单元点",
"MENU_ORDER": "3",
"MENU_ICON": null,
"PARENT_ID": 5
},
{
"MENU_TYPE": null,
"MENU_URL": null,
"MENU_KEY": null,
"MENU_ID": 13,
"MENU_STATE": null,
"MENU_NAME": "小区界线",
"MENU_ORDER": "4",
"MENU_ICON": null,
"PARENT_ID": 5
}
],
"parentdata": {
"MENU_TYPE": null,
"MENU_URL": "#",
"MENU_KEY": null,
"MENU_ID": 5,
"MENU_STATE": null,
"MENU_NAME": "地名地址",
"MENU_ORDER": "5",
"MENU_ICON": null,
"PARENT_ID": 0
}
},
"data3": {
"sons": [
{
"MENU_TYPE": null,
"MENU_URL": null,
"MENU_KEY": null,
"MENU_ID": 8,
"MENU_STATE": null,
"MENU_NAME": "行政区界线_社区/村",
"MENU_ORDER": "1",
"MENU_ICON": null,
"PARENT_ID": 4
},
{
"MENU_TYPE": null,
"MENU_URL": null,
"MENU_KEY": null,
"MENU_ID": 9,
"MENU_STATE": null,
"MENU_NAME": "行政区界线_街道/乡镇",
"MENU_ORDER": "2",
"MENU_ICON": null,
"PARENT_ID": 4
}
],
"parentdata": {
"MENU_TYPE": null,
"MENU_URL": "#",
"MENU_KEY": null,
"MENU_ID": 4,
"MENU_STATE": null,
"MENU_NAME": "行政区划",
"MENU_ORDER": "4",
"MENU_ICON": null,
"PARENT_ID": 0
}
},
"data2": {
"sons": [],
"parentdata": {
"MENU_TYPE": null,
"MENU_URL": "#",
"MENU_KEY": null,
"MENU_ID": 3,
"MENU_STATE": null,
"MENU_NAME": "法人",
"MENU_ORDER": "3",
"MENU_ICON": null,
"PARENT_ID": 0
}
},
"data1": {
"sons": [
{
"MENU_TYPE": null,
"MENU_URL": null,
"MENU_KEY": null,
"MENU_ID": 7,
"MENU_STATE": null,
"MENU_NAME": "困难家庭",
"MENU_ORDER": "1",
"MENU_ICON": null,
"PARENT_ID": 2
}
],
"parentdata": {
"MENU_TYPE": null,
"MENU_URL": "#",
"MENU_KEY": null,
"MENU_ID": 2,
"MENU_STATE": null,
"MENU_NAME": "帮扶",
"MENU_ORDER": "2",
"MENU_ICON": null,
"PARENT_ID": 0
}
},
"data0": {
"sons": [
{
"MENU_TYPE": null,
"MENU_URL": null,
"MENU_KEY": null,
"MENU_ID": 6,
"MENU_STATE": null,
"MENU_NAME": "户籍信息",
"MENU_ORDER": "1",
"MENU_ICON": null,
"PARENT_ID": 1
}
],
"parentdata": {
"MENU_TYPE": null,
"MENU_URL": "#",
"MENU_KEY": null,
"MENU_ID": 1,
"MENU_STATE": null,
"MENU_NAME": "人口",
"MENU_ORDER": "1",
"MENU_ICON": null,
"PARENT_ID": 0
}
}
}
}
到此就完成了。