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