最近在用easyui做一个权限管理系统,需要用到tree,后台构造json数据的时候总是不能很好的适应各种
情况,于是上网看了很多的例子,有几个能用,效率也比自己写的高,然后再加上自己的的业务需求改写了
一部分,就变成下面的代码了
public List getResource(Connection conn, StringBuffer sql,String id,String type){ try { //查出所有的权限集合 List<Menu> menuList = (List)this.find(conn, sql.toString(), Menu.class); //查出id对应的权限的id集合 List<Menu> menuList2 = (List)this.getKeys(conn, "select id from resource a,resource_role b,user_role c where c.userid = '" + id + "' and b.roleid = c.roleid and a.id = b.resourceid", Menu.class); Map map = new HashMap(); List list = new ArrayList(); //把所对应每个权限的放到map中,索引为自身的id for(Menu m1: menuList){ //自身系统的业务需求,当展示自身所拥有的权限时,复选框需要选中 if(menuList2.contains(m1.getId())){ m1.setChecked(true); } map.put(m1.getId(), m1); } //再遍历所有的权限集合,确定父子关系 for(Menu m1 : menuList){ Menu menu = new Menu(); //有父亲 if(m1.getPid() != null && !"".equals(m1.getPid())){ //取出父子 Menu cMenu = (Menu)map.get(m1.getId()); Menu pMenu = (Menu)map.get(m1.getPid()); //这个还需商讨,有种情况是当只有一个孩子的时候,父亲不需要显示(具体看业务需求) if(pMenu != null){ pMenu.getChildren().add(cMenu); pMenu.setChecked(false); } }else{ m1.setChecked(false); list.add((Menu)map.get(m1.getId())); } } return list; } catch (Exception e) { e.printStackTrace(); } return null; }