树状结构对象的获取及遍历

在程序开发过程中我们有时候需要在页面上实现树状结构数据的展现,比如地区树状这是很常见的需求。以下是我做的地区二级联动菜单,我是在页面初始化时从数据库中获取已经封装好的Area对象,这个对象包含我们需要的数据结构,只需在页面上序列化成Json然后遍历Json就Ok了。


Area对象


package com.nstc.gdms.model;

import java.util.LinkedList;

public class Area {
	
	private String areaNo;// 地区编号
	
	private String areaName;// 地区名称
	
	private List subAreas; // 下级地区
	

	public String getAreaNo() {
		return areaNo;
	}

	public void setAreaNo(String areaNo) {
		this.areaNo = areaNo;
	}

	public String getAreaName() {
		return areaName;
	}

	public void setAreaName(String areaName) {
		this.areaName = areaName;
	}

	public void addSubAreas(Area area) {
		if(subAreas == null){
			this.subAreas = new LinkedList();
		}
		this.subAreas.add(area);
	}
	
	public void setSubAreas(List subAreas) {
		this.subAreas = subAreas;
	}
	
	public List getSubAreas() {
		return subAreas;
	}

	@Override
	public String toString() {
		return "Area [areaNo=" + areaNo + ", areaName=" + areaName + "]";
	}
	
}

数据库表的结构主要关注四个字段ID_、NAME_、PARENTID_和level_,其中ID_是地区编号,NAME_是地区名称,

PARENTID_是父节点,其值为空时表示中国,level_是地区等级,查询时要按等级排序,以下是sql语句:


SELECT NAME_ AS "areaName",ID_ AS "areaNo",PARENTID_ AS "parentId" FROM CB_BA_AREA_CODE ORDER BY level_ , order_ 


service层,把符合条件的Area对象返回页面即可


 /**   
	 * 取地区树
	 */
	public Area findAreaTree() {
		List> pMaps = accountAccessor.findAreaTreeMap();
		Map areaPool = new HashMap();
		Area root = null;
		for(Map map:pMaps){
			Area area = new Area();
			String areaNo = map.get("areaNo") == null?"":String.valueOf(map.get("areaNo"));
			String areaName = map.get("areaName");
			area.setAreaNo(areaNo);
			area.setAreaName(areaName);
			String parentId = map.get("parentId") == null?"":String.valueOf(map.get("parentId"));
			Area parentNode = areaPool.get(parentId);
			if(parentNode != null){
				parentNode.addSubAreas(area);
			}
			areaPool.put(area.getAreaNo(), area);
			if("".equals(parentId)){
				root = area;
			}
		}
		return root;
	}






你可能感兴趣的:(Java)