调用代码:
StringBuffer menus=new StringBuffer(); List<EsbAdminMenuInfo> list=menuServiceImpl.getAll(); buildChildMenu(list,0L,menus); return menus.toString();
递归代码:
/** * 递归生成菜单结构 * @param list 所有的菜单集合 * @param parentNoteId 菜单父节点 * @param menus 追加节点 * */ public void buildChildMenu(List<EsbAdminMenuInfo> list,Long parentNoteId,StringBuffer menus){ List<EsbAdminMenuInfo> nodes=new ArrayList<EsbAdminMenuInfo>(); //查找参数parentNoteId与集合中对象的parentNoteId相同的菜单对象 for(EsbAdminMenuInfo mi : list){ if(mi.getParentMenuId()==parentNoteId){ nodes.add(mi); } } for(int i = 0; i<nodes.size(); i++){ EsbAdminMenuInfo mi =nodes.get(i); if(mi.getParentMenuId()==0||mi.getUrl()==null||"".equals(mi.getUrl())){ //父节点 menus.append("<div class='parent'><div class='padding'>").append(mi.getMenuName()).append("</div></div>"); }else if(mi.getUrl()!=null&&!"".equals(mi.getUrl())){ //只要是子节点第一次就添加<div class='subMenus'> 并记录有一个子节点 if(i==0){ countSubMenu++; menus.append("<div class='subMenus'>"); } menus.append("<div class='action'><div class='padding'>"). append("<a href='").append(mi.getUrl()).append("' target='context'>").append(mi.getMenuName()).append("</a></div></div>"); //结束最外面的<div class='subMenus'> if(i==nodes.size()-1){ for(int j=0;j<countSubMenu;j++){ menus.append("</div>"); } //每次到了最大的父节点 初始化它的子节点数量 countSubMenu=0; } } buildChildMenu(list,mi.getMenuId(),menus); } }