create table sys_moudle( id varchar(32),--每四个为一个层级 0001|00010001|000100010001 0002 levels int, --表示是第几层 name varchar(32),--菜单的名字 createdate date,--创建日期 modifydate date,--更改日期 adduser varchar(32),--创建用户 isshow char(1) check isshow in('0','1'),--该页面是否显示 url varchar(300),--页面路径相对于WEB-INFO indexes int); select * from sys_moudle order by id; alter table sys_moudle add haschild char(1) check haschild in('0','1');--是否是叶子节点 0是叶子 alter table sys_moudle add parentid varchar(32); --父节点id alter table sys_moudle add samecoluuid varchar(32);--同一列标识 -- drop table sys_moudle; -- delete from sys_moudle where id is null; INSERT INTO `sys_moudle` VALUES ('0001', 1, 'Home', '2016-4-11 00:00:00', '2016-4-11 00:00:00', 'ctl', '1', NULL, 100, '1', NULL, '0001'); INSERT INTO `sys_moudle` VALUES ('00010001', 2, 'HomeSub1', '2016-4-11 00:00:00', '2016-4-11 00:00:00', 'ctl', '1', NULL, 100101, '1', '0001', '0001'); INSERT INTO `sys_moudle` VALUES ('000100010001', 3, 'HomeSub1Sub1', '2016-4-11 00:00:00', '2016-4-11 00:00:00', 'ctl', '1', 'jsp/homesub1sub1.jsp', 100101101, '0', '00010001', '0001'); INSERT INTO `sys_moudle` VALUES ('00010002', 2, 'HomeSub2', '2016-4-11 00:00:00', '2016-4-11 00:00:00', 'ctl', '1', NULL, 100101, '1', '0001', '0001'); INSERT INTO `sys_moudle` VALUES ('000100020001', 3, 'HomeSub2Sub1', '2016-4-11 00:00:00', '2016-4-11 00:00:00', 'ctl', '1', 'jsp/homesub2sub1.jsp', 100101, '0', '00010002', '0001'); INSERT INTO `sys_moudle` VALUES ('000100020002', 3, 'HomeSub2Sub2', '2016-4-11 00:00:00', '2016-4-11 00:00:00', 'ctl', '1', 'jsp/homesub2sub2.jsp', 100101, '0', '00010002', '0001'); INSERT INTO `sys_moudle` VALUES ('0002', 1, 'Item2', '2016-4-12 00:00:00', '2016-4-12 00:00:00', 'ctl', '1', NULL, 200, '1', NULL, '0002'); INSERT INTO `sys_moudle` VALUES ('00020001', 2, 'Item2Sub1', '2016-4-12 00:00:00', '2016-4-12 00:00:00', 'ctl', '1', '', 200, '1', '0002', '0002'); INSERT INTO `sys_moudle` VALUES ('000200010001', 3, 'Item2Sub1Sub1', '2016-4-12 00:00:00', '2016-4-12 00:00:00', 'ctl', '1', 'jsp/item2sub1sub1.jsp', 200, '1', '00020001', '0002'); INSERT INTO `sys_moudle` VALUES ('0003', 1, 'Item3', '2016-4-12 00:00:00', '2016-4-12 00:00:00', 'ctl', '1', NULL, 300, '0', NULL, '0003');
package com.ctl.sys.po; import java.util.Map; /**@author guolin * @date 2016-4-17上午10:00:18 * @package_name com.ctl.sys.po * @project_name Aa权限 * @version version.1.0 */ public class HtmlMenu { private StringBuilder bufLevelOne=new StringBuilder(); private StringBuilder bufLevelTwo=new StringBuilder(); private StringBuilder bufLevelThird=new StringBuilder(); /** * @param sysMoudle * @param map map中存放的是该节点的所有的子节点 */ public void setBufLevelOne(SysMoudle sysMoudle,Map<String,HtmlMenu> map){ // if(bufLevelOne.length()==0){ // bufLevelOne.append("<div><ul>"); // } if("0".equals(sysMoudle.getHaschild())){//如果没有子节点 bufLevelOne.append("<li><a href='").append(sysMoudle.getUrl()).append("'><span>").append(sysMoudle.getName()).append("</span></a></li>"); }else{//有子节点 bufLevelOne.append("<li><a href='#' class='parent'><span>").append(sysMoudle.getName()).append("</span></a>").append(map.get(sysMoudle.getId()).getBufLevel2()).append("</li>"); } } // public StringBuilder getBufLevelOne(){ // return bufLevelOne.append("</ul></div>"); // } public StringBuilder getBufLevel1() { return bufLevelOne; } // 节点二按parentsid生成,生成后存储到map中 map<parentId,menuLevelTwo> // <div> // <ul> // <li><a href='#' class='parent'><span>Sub Item 2</span></a> // <div> // <ul> // <li><a href='#'><span>Sub Item 2.1</span></a></li> // <li><a href='#'><span>Sub Item 2.2</span></a></li> // </ul> // </div> // </li> // <li><a href='#'><span>Sub Item 3</span></a></li> // </ul> // </div> public StringBuilder getBufLevelTwo() { return bufLevelTwo.append("</ul></div>"); } public StringBuilder getBufLevel2() { return bufLevelTwo; } /** * @param sysMoudle * @param map map中存放的是该节点的所有的子节点 */ public void setBufLevelTwo(SysMoudle sysMoudle,Map<String,HtmlMenu> map) { //").append(href).append(" if(bufLevelTwo.length()==0){ bufLevelTwo.append("<div><ul>"); } if("0".equals(sysMoudle.getHaschild())){//如果没有子节点 bufLevelTwo.append("<li><a href='").append(sysMoudle.getUrl()).append("'><span>").append(sysMoudle.getName()).append("</span></a></li>"); }else{//有子节点 bufLevelTwo.append("<li><a href='#' class='parent'><span>").append(sysMoudle.getName()).append("</span></a>").append(map.get(sysMoudle.getId()).getBufLevel3()).append("</li>"); } } //节点三按parentsid生成,生成后存储到map中 map<parentId,menuLevelThird> // <div> // <ul> // <li><a href='#'><span>Sub Item 1.7.1</span></a></li> // <li><a href='#'><span>Sub Item 1.7.2</span></a></li> // </ul> // </div> private StringBuilder getBufLevel3() { return bufLevelThird; } public void setBufLevelThird(SysMoudle sysMoudle) { if(bufLevelThird.length()>0){ bufLevelThird.append("<li><a href='").append(sysMoudle.getUrl()).append("'><span>").append(sysMoudle.getName()).append("</span></a></li>"); }else{ bufLevelThird.append("<div><ul>"); bufLevelThird.append("<li><a href='").append(sysMoudle.getUrl()).append("'><span>").append(sysMoudle.getName()).append("</span></a></li>"); } } public StringBuilder getBufLevelThird() { return bufLevelThird.append("</ul></div>"); } }
List<SysMoudle> list=sysService.getAllSysMoudle(); Iterator<SysMoudle> iterator=list.iterator(); Map<String,SysMoudle> level1Map=new HashMap<String,SysMoudle>(); Map<String,List<SysMoudle>> level2Map=new HashMap<String, List<SysMoudle>>(); Map<String,List<SysMoudle>> level3Map=new HashMap<String, List<SysMoudle>>(); Map<String,HtmlMenu> menu1Map=new HashMap<String,HtmlMenu>(); Map<String,HtmlMenu> menu2Map=new HashMap<String,HtmlMenu>(); Map<String,HtmlMenu> menu3Map=new HashMap<String,HtmlMenu>(); while(iterator.hasNext()){ SysMoudle sysMoudle=iterator.next(); String id=sysMoudle.getId(); String parentId=sysMoudle.getParentid(); int level=sysMoudle.getLevels(); if(level==1){//一级菜单 level1Map.put(id, sysMoudle); } if(level==2){//所有的二级菜单 List<SysMoudle> listLeve2=(List<SysMoudle>) level2Map.get(parentId); if(listLeve2==null){ listLeve2=new ArrayList<SysMoudle>(); listLeve2.add(sysMoudle); level2Map.put(parentId, listLeve2); }else{ listLeve2.add(sysMoudle); } } if(level==3){//所有的三级菜单 List<SysMoudle> listLeve3=(List<SysMoudle>) level3Map.get(parentId); if(listLeve3==null){ listLeve3=new ArrayList<SysMoudle>(); listLeve3.add(sysMoudle); level3Map.put(parentId, listLeve3); }else{ listLeve3.add(sysMoudle); } } } //处理所有的三级菜单生成html Set<String> level3Set=level3Map.keySet(); Iterator<String> iterLevel3=level3Set.iterator(); while(iterLevel3.hasNext()){ String parentId=iterLevel3.next(); List<SysMoudle> listLevel3=level3Map.get(parentId);//相同父节点的三级菜单 HtmlMenu htmlMenu=null; for(int i=0;i<listLevel3.size();i++){ SysMoudle sysMoudle=listLevel3.get(i); htmlMenu=menu3Map.get(listLevel3.get(i).getParentid()); if(htmlMenu==null){ htmlMenu=new HtmlMenu(); htmlMenu.setBufLevelThird(sysMoudle);//创建第三层菜单 menu3Map.put(sysMoudle.getParentid(), htmlMenu); }else{ htmlMenu.setBufLevelThird(sysMoudle); } }//注意生成的三级菜单没有 </ul></div>闭合 } Set<String> menu3MapSet=level3Map.keySet(); Iterator<String> menu3MapLevel3=menu3MapSet.iterator(); while(menu3MapLevel3.hasNext()){ HtmlMenu menu=menu3Map.get(menu3MapLevel3.next()); System.out.println(menu.getBufLevelThird()); } //处理所有的二级级菜单生成html Set<String> level2Set=level2Map.keySet(); Iterator<String> iterLevel2=level2Set.iterator(); while(iterLevel2.hasNext()){ String parentId=iterLevel2.next(); List<SysMoudle> listLevel2=level2Map.get(parentId);//相同父节点的二级菜单 HtmlMenu htmlMenu=null; for(int i=0;i<listLevel2.size();i++){ SysMoudle sysMoudle=listLevel2.get(i); htmlMenu=menu2Map.get(listLevel2.get(i).getParentid()); if(htmlMenu==null){ htmlMenu=new HtmlMenu(); htmlMenu.setBufLevelTwo(sysMoudle,menu3Map);//创建第二层菜单 menu2Map.put(sysMoudle.getParentid(), htmlMenu); }else{ htmlMenu.setBufLevelTwo(sysMoudle,menu3Map);//创建第二层菜单 } }//注意生成的二级菜单没有 </ul></div>闭合 } Set<String> menu2MapSet=level2Map.keySet(); Iterator<String> menu2MapLevel2=menu2MapSet.iterator(); while(menu2MapLevel2.hasNext()){ HtmlMenu menu=menu2Map.get(menu2MapLevel2.next()); System.out.println(menu.getBufLevelTwo()); } //处理所有的一级级菜单生成html Set<String> level1Set=level1Map.keySet(); Iterator<String> iterLevel1=level1Set.iterator(); while(iterLevel1.hasNext()){ String id=iterLevel1.next(); SysMoudle sysMoudle=level1Map.get(id);//相同父节点的二级菜单 HtmlMenu htmlMenu=menu1Map.get(id); if(htmlMenu==null){ htmlMenu=new HtmlMenu(); htmlMenu.setBufLevelOne(sysMoudle,menu2Map);//创建第一层菜单 menu1Map.put(id, htmlMenu); }else{ htmlMenu.setBufLevelOne(sysMoudle,menu2Map);//创建第一层菜单 } }//注意生成的一级菜单没有 </ul></div>闭合 Set<String> menu1MapSet=level1Map.keySet(); Iterator<String> menu1MapLevel1=menu1MapSet.iterator(); while(menu1MapLevel1.hasNext()){ HtmlMenu menu=menu1Map.get(menu1MapLevel1.next()); System.out.println(menu.getBufLevel1()); } StringBuilder bufMenu=new StringBuilder();//最终菜单 bufMenu.append("<div id='menu'>"); bufMenu.append("<ul class='menu'>"); Iterator<String> menuSet=menu1Map.keySet().iterator(); while(menuSet.hasNext()){ bufMenu.append(menu1Map.get(menuSet.next()).getBufLevel1()); } bufMenu.append("<div><ul>");
package com.ctl.sys.po; import java.util.Date; public class SysMoudle { private String id; private Integer levels; private String name; private Date createdate; private Date modifydate; private String adduser; private String isshow; private String url; private Integer indexes; private String haschild; private String parentid; private String sameColUuid; public String getSameColUuid() { return sameColUuid; } public void setSameColUuid(String sameColUuid) { this.sameColUuid = sameColUuid; } public String getId() { return id; } public void setId(String id) { this.id = id == null ? null : id.trim(); } public Integer getLevels() { return levels; } public void setLevels(Integer levels) { this.levels = levels; } public String getName() { return name; } public void setName(String name) { this.name = name == null ? null : name.trim(); } public Date getCreatedate() { return createdate; } public void setCreatedate(Date createdate) { this.createdate = createdate; } public Date getModifydate() { return modifydate; } public void setModifydate(Date modifydate) { this.modifydate = modifydate; } public String getAdduser() { return adduser; } public void setAdduser(String adduser) { this.adduser = adduser == null ? null : adduser.trim(); } public String getIsshow() { return isshow; } public void setIsshow(String isshow) { this.isshow = isshow == null ? null : isshow.trim(); } public String getUrl() { return url; } public void setUrl(String url) { this.url = url == null ? null : url.trim(); } public Integer getIndexes() { return indexes; } public void setIndexes(Integer indexes) { this.indexes = indexes; } public String getHaschild() { return haschild; } public void setHaschild(String haschild) { this.haschild = haschild == null ? null : haschild.trim(); } public String getParentid() { return parentid; } public void setParentid(String parentid) { this.parentid = parentid == null ? null : parentid.trim(); } @Override public String toString() { return "SysMoudle [id=" + id + ", levels=" + levels + ", name=" + name + ", createdate=" + createdate + ", modifydate=" + modifydate + ", adduser=" + adduser + ", isshow=" + isshow + ", url=" + url + ", indexes=" + indexes + ", haschild=" + haschild + ", parentid=" + parentid + ", sameColUuid=" + sameColUuid + "]"; } }