树形,递归菜单,我已经在数据库查出树形结构了,填充list,搞不定了!!

Viven_xiang 2016-11-08 05:55:09



第一张是数据库数据,用cte查的
第二张需要展现的数据结构
...全文
1294 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2017-12-30
  • 打赏
  • 举报
回复
实体类 id name list<类名> childList 用list装起来 转成json 前台用easyui
reyoreyoreyo 2017-12-01
  • 打赏
  • 举报
回复
java算法实现树型目录反向生成(在指定的盘符或位置生成相应的文件结构)
http://www.cnblogs.com/interdrp/p/6702482.html

由于此次文件管理系统的升级确实给我们带来了很多方便且在性能上有很大提升,经过这段时间的使用 也发现了些问题:在 windows 下对同一目录下的一个文件或多个文件压缩程序很容易就作到了,但如果要对不同目录的指定文件压缩就...你只能将要压缩的文件放同一目录下操作了吧....

我们目录采用的是虚拟方式和实际的目录无关,只是存在一定的逻辑关系,由于服务器上并不存在文件夹,那么我们只能根据数据库的逻辑关系重建目录结构。如图

如用户随机传入 id 就在服务器上生成相应的目录结构

目录生成好之后就是文件的复制及压缩处理了:

我们可以直接压缩选中的目录也可以再次在右边选定要压缩的文件:





reyoreyoreyo 2017-12-01
  • 打赏
  • 举报
回复
有现成的控件。为什么一定要自己来写。。。。
Inhibitory 2017-12-01
  • 打赏
  • 举报
回复
正好写了个转换为树的代码,不妨看看
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>

</head>

<body>
    <pre id="result"></pre>

    <script>
        class Tree {
            /**
             * 使用表示树的节点的数组创建树,数组元素的属性中需要有 id 和 parentId 两个属性,其他属性不受限制
             * 数组元素的格式为 { id: 3, name: 'C', parentId: 1 },表示当前节点是 id 为 1 的节点的子节点
             *
             * TODO: 一级节点的 id, parentId 属性名和 parentId 的值可以使用参数传过来,而不是固定死的
             *
             * @param {Array} nodes 表示树节点的数组
             */
            constructor(nodes) {
                nodes = JSON.parse(JSON.stringify(nodes)); // 深拷贝 nodes,避免外部修改 nodes 破坏树的结构
                this.root = Tree.build(nodes);
            }

            /**
             * 根据数组中元素的关系构造树,子节点存储在父节点的 children 数组中
             *
             * @param  {Array} nodes 表示树的节点数组
             * @return {Json}        返回树的根节点
             */
            static build(nodes) {
                // 构造树节点的父子关系
                var root = { id: 0, name: 'Root', children: [] };

                nodes.forEach((node) => {
                    // 选择 parentId 为 0 的节点作为根节点的子节点
                    if (node.parentId === 0) {
                        root.children.push(node);
                    }

                    var parent = Tree.findParent(nodes, node.parentId);

                    // 如果找到父节点,则把节点添加到父节点的 children 数组中
                    if (parent) {
                        if (!parent.children) {
                            parent.children = [];
                        }
                        parent.children.push(node);
                    }
                });

                return root;
            }

            /**
             * 使用父节点的 id 查找父节点
             *
             * @param  {Array}   nodes    表示树的节点数组
             * @param  {Integer} parentId 父节点的 id
             * @return {Json}             找到返回父节点,否则返回 null
             */
            static findParent(nodes, parentId) {
                for (var i=0; i<nodes.length; ++i) {
                    var node = nodes[i];
                    if (node.id == parentId) {
                        return node;
                    }
                }

                return null;
            }
        }

        /*
            |--A
            |  |--C
            |  |--D
            |     |--E
            |     |--F
            |        |--G
            |--B
               |--H
               |--I
         */
        var nodes = [
            { id: 1, name: 'A', parentId: 0 },
            { id: 2, name: 'B', parentId: 0 },
            { id: 3, name: 'C', parentId: 1 },
            { id: 4, name: 'D', parentId: 1 },
            { id: 5, name: 'E', parentId: 4 },
            { id: 6, name: 'F', parentId: 4 },
            { id: 7, name: 'G', parentId: 6 },
            { id: 8, name: 'H', parentId: 2 },
            { id: 9, name: 'I', parentId: 2 },
        ];

        var tree = new Tree(nodes);
        document.getElementById('result').innerHTML = JSON.stringify(tree.root, null, 4);
    </script>
</body>

</html>
Tony.Jia 2017-11-28
  • 打赏
  • 举报
回复
兄弟你这个搞定了嘛,我现在也遇到同样的问题,如果你自己解决,请贴出源码,谢谢
  • 打赏
  • 举报
回复
引用 10 楼 u014479626 的回复:
引用 8 楼 qnmdcsdn 的回复:
list<list<list<map>>>???前台怎么展示的,不能用json?
就是要把封装好的对象,最后转换成json。。怎么把这数据在给整理一下
定义节点对象,父节点中包含子节点集合,一层层的对应。把数据封装进去之后转成json
Viven_xiang 2016-11-09
  • 打赏
  • 举报
回复
引用 12 楼 roy_88 的回复:
看你展示风格,是WEB功能? ------------- 这类功能实现是对程序用法先加载,再按层数和父级ID关系逐层展开
要把数据再次整理
Viven_xiang 2016-11-09
  • 打赏
  • 举报
回复
引用 13 楼 ch21st 的回复:
没太明白你的意思,结果出来,显示就不难了 比如平铺全部展开显示,标题的缩进,你根据levels的值缩进就行 如果初始收缩显示,你初始化先显示最高一级,先加载levels=1,然后根据它有没有子节点,是否显示扩展的 + 图标 这样,最好在结果中,每一行增加一列表示是否有子节点 点击+ 在根据传递进去的当前节点作为加载子节点的parentunitcode,加载出子节点
我在写接口,我要把数据库数据全部给他搞好然后在返回给他,要把数据整理一下,怎么搞
道素 2016-11-09
  • 打赏
  • 举报
回复
没太明白你的意思,结果出来,显示就不难了 比如平铺全部展开显示,标题的缩进,你根据levels的值缩进就行 如果初始收缩显示,你初始化先显示最高一级,先加载levels=1,然后根据它有没有子节点,是否显示扩展的 + 图标 这样,最好在结果中,每一行增加一列表示是否有子节点 点击+ 在根据传递进去的当前节点作为加载子节点的parentunitcode,加载出子节点
中国风 2016-11-09
  • 打赏
  • 举报
回复
看你展示风格,是WEB功能? ------------- 这类功能实现是对程序用法先加载,再按层数和父级ID关系逐层展开
Viven_xiang 2016-11-09
  • 打赏
  • 举报
回复
引用 9 楼 yupeigu 的回复:
这个直接用java实现把,这个用控件就可以了,一个一个加载上去,而且是有上下级关联的。先把顶层的家在上去,然后再加在子菜单
前台不用控件,要把数据库的数据二次整理,怎么搞。。
Viven_xiang 2016-11-09
  • 打赏
  • 举报
回复
引用 8 楼 qnmdcsdn 的回复:
list<list<list<map>>>???前台怎么展示的,不能用json?
就是要把封装好的对象,最后转换成json。。怎么把这数据在给整理一下
LongRui888 2016-11-09
  • 打赏
  • 举报
回复
这个直接用java实现把,这个用控件就可以了,一个一个加载上去,而且是有上下级关联的。先把顶层的家在上去,然后再加在子菜单
  • 打赏
  • 举报
回复
list<list<list<map>>>???前台怎么展示的,不能用json?
Viven_xiang 2016-11-09
  • 打赏
  • 举报
回复
顶顶顶顶顶顶顶顶顶顶
Viven_xiang 2016-11-09
  • 打赏
  • 举报
回复
顶顶顶顶顶顶顶顶顶顶顶顶
Viven_xiang 2016-11-09
  • 打赏
  • 举报
回复
引用 4 楼 wmxcn2000 的回复:
这个属于高级语言的范畴了,让 @中国风 给你移 到相应的版块吧;
怎么移
卖水果的net 2016-11-09
  • 打赏
  • 举报
回复
这个属于高级语言的范畴了,让 @中国风 给你移 到相应的版块吧;
Viven_xiang 2016-11-08
  • 打赏
  • 举报
回复
顶顶顶顶顶顶
Viven_xiang 2016-11-08
  • 打赏
  • 举报
回复
顶顶顶顶顶顶顶顶
加载更多回复(1)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧