日期:2014-05-19 浏览次数:21137 次
//数据对象
public class SmMenu {
private String id;
private String pid;//父节点ID
private String lel;
private String name;
//存放子节点集合
private List<SmMenu> menuList;
// setter and getter
...
}
public List<SmMenu> getMenuTree() {
List<SmMenu> menuList = new ArrayList<SmMenu>();
//从数据库查询到所有数据
List<SmMenu> allList=this.findAll();
Map<String,SmMenu> map=new HashMap<String,SmMenu>();
for(SmMenu bo : allList){
map.put(bo.getId(), bo);
if(bo.getPid()==null){
//存放顶级节点到一个集合
menuList.add(bo);
}
}
//存放子节点集合
for(SmMenu bo : allList){
if(bo.getPid()!=null){
SmMenu parent=map.get(bo.getPid());
parent.getMenuList().add(bo);
}
}
return menuList;
}
//递归得到最终的xml结构数据
public String getXML(List<SmMenu> list){
StringBuffer xmlNode = new StringBuffer();
for(SmMenu bo : allList){
xmlNode.append("<node ");
xmlNode.append("id='"+bo.getId()+"' ");
xmlNode.append("pid='"+bo.getPid()+"' ");
xmlNode.append("lel='"+bo.getLel()+"' ");
xmlNode.append("name='"+bo.getName()+"' ");
if(bo.getMenuList()!=null && bo.getMenuList().size()>0){
xmlNode.append(">\n");
xmlNode.append(this.getXML());
xmlNode.append("\n");
xmlNode.append("</node>");
}else{
xmlNode.append("/>");
}
}
return xmlNode.toString();
}
public void test(){
System.out.println(this.getXML(this.getMenuTree()));
}
------解决方案--------------------
好像报表····
------解决方案--------------------
你得有个Pid的;挂钩上级目录;找他的pid比较方便吧;