日期:2014-05-19 浏览次数:21148 次
//数据对象
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比较方便吧;