递归无限级树下拉菜单

Java代码  
  1. /**  
  2.   *树形菜单VO  
  3.   */  
  4.  public class SelectTree implements Serializable{   
  5.     private int id;   
  6.     private String name;   
  7.     private List<SelectTree> child = new ArrayList<SelectTree>();   
  8.                //getter & setter ....略   
  9. }  
	/**
	  *树形菜单VO
	  */
	public class SelectTree implements Serializable{
		private int id;
		private String name;
		private List<SelectTree> child = new ArrayList<SelectTree>();
                //getter & setter ....略
	}

代码片段:

Java代码  
  1. /**  
  2.  * 构建树型菜单数据  
  3.  */  
  4. public List<SelectTree> buildNode(int pid,List<YcChannel> channels){   
  5.     List<SelectTree> result = new ArrayList<SelectTree>();   
  6.     for(YcChannel chl:channels){   
  7.         SelectTree node = new SelectTree();   
  8.         if(null != chl.getParentId() && chl.getParentId().equals(pid)){   
  9.             node.setId(chl.getChannelId());   
  10.             node.setName(chl.getName());   
  11.             List<SelectTree> children = buildNode(chl.getChannelId(),channels);   
  12.             if(null != children && 0 < children.size()){   
  13.                 node.setChild(children);   
  14.             }   
  15.             result.add(node);    
  16.         }   
  17.     }   
  18.     return result;   
  19. }   
  20.   
  21. public String queryChannelList() {   
  22.     ycChannelList = this.channelSer.queryChannelList();   
  23.     List<SelectTree> trees = new ArrayList<SelectTree>();   
  24.     for(YcChannel yc:ycChannelList){   
  25.         if(null == yc.getParentId()){   
  26.             SelectTree t = new SelectTree();   
  27.             t.setId(yc.getChannelId());   
  28.             t.setName(yc.getName());   
  29.             t.setChild(buildNode(t.getId(),ycChannelList));   
  30.             trees.add(t);   
  31.         }   
  32.     }   
  33.     this.setAjaxData(trees);   
  34.     return AJAX_DATA;   
  35. }  
	/**
	 * 构建树型菜单数据
	 */
	public List<SelectTree> buildNode(int pid,List<YcChannel> channels){
		List<SelectTree> result = new ArrayList<SelectTree>();
		for(YcChannel chl:channels){
			SelectTree node = new SelectTree();
			if(null != chl.getParentId() && chl.getParentId().equals(pid)){
				node.setId(chl.getChannelId());
				node.setName(chl.getName());
				List<SelectTree> children = buildNode(chl.getChannelId(),channels);
				if(null != children && 0 < children.size()){
					node.setChild(children);
				}
				result.add(node); 
			}
		}
		return result;
	}
	
	public String queryChannelList() {
		ycChannelList = this.channelSer.queryChannelList();
		List<SelectTree> trees = new ArrayList<SelectTree>();
		for(YcChannel yc:ycChannelList){
			if(null == yc.getParentId()){
				SelectTree t = new SelectTree();
				t.setId(yc.getChannelId());
				t.setName(yc.getName());
				t.setChild(buildNode(t.getId(),ycChannelList));
				trees.add(t);
			}
		}
		this.setAjaxData(trees);
		return AJAX_DATA;
	}

前端JS代码:

Js代码  
  1.     //recursive tree node   
  2.     function buildNode(len,data){   
  3.         var prefix = "|";   
  4.         for(var i=0;i<len;i++){   
  5.             prefix += "-";   
  6.         }   
  7.         $.each(data,function(i,item){   
  8.             if(0 < item.child.length){   
  9.                 $('#typeid').append("<option value="+item.id +">" + prefix + item.name + "</option>");   
  10.                 buildNode(len+1,item.child);   
  11.             }else{   
  12.                 $('#typeid').append("<option value="+item.id +">" + prefix + item.name + "</option>");   
  13.             }   
  14.         });   
  15.     }   
  16.        
  17.     $.ajax({   
  18.         url:'${base}/channel/channelAction!queryChannelList.action',   
  19.         type:'GET',   
  20.         dataType:'json',   
  21.         contentType:'application/json',   
  22.         success:function(json){   
  23.             if(json.success){   
  24.                 $('#typeid').empty();   
  25.                 $('#typeid').append("<option value='0'>请选择栏目...</option>");   
  26.                 $.each(json.data,function(i,item){   
  27.                     if(null == item.parentId){   
  28.                         $('#typeid').append("<option value="+item.id +">" + item.name + "</option>");   
  29.                         buildNode(1,item.child);   
  30.                     }   
  31.                 });   
  32.             }   
  33.         },   
  34.         error:function(){   
  35.             alert("加载栏目出错!");   
  36.         }   
  37.     });   
  38.        
  39. });  
posted @ 2011-07-09 16:32  荡来荡去(allen)  阅读(937)  评论(0编辑  收藏  举报