无限递归生成菜单!
调用代码:
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);}}