目录

删除

存储:每个节点有一个ID属性和ParentID属性。

树结构, Node0为根节点:

Node0
    |--Node11
         |-----Node21
         |-----Node22
                  |-------Node31
    |--Node12
         |-----Node23
         |-----Node24
                   |-------Node32

关键代码片段:

    public void delete(String id){
        List<UserGroup> groups=new ArrayList<UserGroup>();  //必须New一个对象。
        groups=userGroupDao.findSubGroup(id);               //找出子节点
        for(UserGroup group:groups) {
            delete(group.getId());
        }
        userGroupDao.delete(id);
    }

调用方法:如果要删除Node0及其下所有节点,只需传入Node0的ID。

读取

表结构如下,通过parentId来实现递归。

递归树形结构数据删除和读取

后端构建菜单树

使用List

children来放置递归数据。

/**
     * 构建菜单树json
     * @param menuList
     * @return
     */
    public List<Menu> createMenuTree(List<Menu> menuList) {
        List<Menu> nodeList = new ArrayList<Menu>();
        for (Menu menu1 : menuList) {
            boolean mark = false;
            for (Menu menu2 : menuList) {
                if (menu1.getParentId() == menu2.getId()) {
                    mark = true;
                    if (menu2.getChildren() == null) {
                        menu2.setChildren(new ArrayList<Menu>());
                    }
                    menu2.getChildren().add(menu1);
                    break;
                }
            }
            if (!mark) {
                nodeList.add(menu1);
            }
        }
        return nodeList;
    }

前端加载树

$("#btnGetMenu").live("click", function () {
        var menuName=$("#txtMenuName").val();
        $.ajax({
            type: "POST",
            cache : false,
            url: basePath+"/getmenu",
               data : {menuName:menuName},
            dataType: 'json',            
            success : function(data){                
                alert(loadMent(data,0));
            },
            error : function(){
                alert("error");
            }
        });
    });

    //采用递归算法加载树形菜单
    var menuStr="";
    var deep=0;
    function loadMent(data){
        var temp="";
        if(deep==1){
            temp=" ";
        }
        if(deep==2){
            temp="  ";
        }
        $.each(data, function(i, item) {
            menuStr+=temp+item.menuName+"\n";
            if(item.children.length>0){
                deep++;
                loadMent(item.children);
            }
        });
        deep=0;
        return menuStr;
    }

参考资料:http://www.supmen.com/x9qrgw21z6.html