无限递归生成菜单!

调用代码:
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);
		}
	}

你可能感兴趣的:(递归)