树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示

一、业务原型:公司的组织结构、传销关系网

二、数据库模型

很简单,创建 id 与 pid 关系即可。(pid:parent_id)

三、Java模型

(我们把这张网撒在html的一张表里。其实用ul来展示会简单N多,自己思考为什么LZ会选择放在表里)

private class Table {
        private Long id; // 当前对象的id
        private int x; // 横坐标
        private int y; // 纵坐标
        private List<Table> tables; // 当前对象的下级集合

public Table(Long id) {
            this.id = id; // 方便快速创建对象
        }
    }

1、组装Java模型数据

1)一次性从表里查出所有数据

2)创建下面的Map  

// pid 与 List<id> 上级ID与下级对象的对应关系
            Map<Long, List<Table>> psMap = new HashMap<>(); // 简单,不详细说明了

3)创建顶级节点

用顶级对象的ID new 一个Table,然后根据ID从上面的 psMap 取出它的下级给这个 Table 的 tables。

4)递归完成所有子级节点

循环Table对象的tables集合,重复上面一个步骤即可

5)计算每个Table对象的横(x)纵(y)坐标

这里再创建一个对象

private class Max {
                    private int x = 1; // 表的行 
                    private int y = 1; // 列
                }

    // 计算纵坐标
private void countY(List<Table> tables, int y, Max max) {
if (tables != null)
for (Table table : tables) {
table.y = y;
countY(table.tables, y + 1, max);
if (y > max.y)
max.y = y;
}
} // 计算横坐标
private void countX(List<Table> tables, int x, Max max) {
if (tables != null)
for (Table table : tables) {
table.x = max.x;
if (table.tables != null) {
max.x++;
}
countX(table.tables, max.x, max);
}
else
max.x = x + 1;
}

2、创建二维数组,对应html页面中要展示的表

T[][] ts = new T[max.x][max.y]; // T对应数据库表里的对象

上面的Java模型已经将每个对象的横(x)纵(y)坐标都算出来了,填充到这个二维数组即可

四、html页面展示

1、根据前面的Max对象画一个表格,标注坐标

2、用上面的二维数组填充表格

五、表格画好,接下来你可以不折手段了(这就是我不用ul的原因)

1、统计每行每列的数据

2、设置各种乱八七糟的样式

树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示的更多相关文章

  1. java集合树状结构及源码

    java集合树状结构及源码 最近一直想看一下java集合的源码,毕竟平时用的比较多,但总是感觉是跟着习惯new出来一个对象,比如ArrayList,HashMap等等,所以就简单的看了一下,了解了一下 ...

  2. 浅谈oracle树状结构层级查询之start with ....connect by prior、level及order by

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

  3. 浅谈oracle树状结构层级查询测试数据

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

  4. openerp学习笔记 对象间关系【多对一(一对一)、一对多(主细结构)、多对多关系、自关联关系(树状结构)】

    1.多对一(一对一)关系:采购单与供应商之间的关系 'partner_id':fields.many2one('res.partner', 'Supplier', required=True, sta ...

  5. Android无限级树状结构

    通过对ListView简单的扩展.再封装,即可实现无限层级的树控件TreeView. package cn.asiontang.nleveltreelistview; import android.a ...

  6. 由简入繁实现Jquery树状结构

    在项目中,我们经常会需要一些树状结构的样式来显示层级结构等,比如下图的样式,之前在学.net的时候可以直接拖个服务端控件过来直接使用非常方便.但是利用Jquery的一些插件,也是可以实现这些效果的,比 ...

  7. JQuery 树状结构 jQuery-treeview.js 插件

    由简入繁实现Jquery树状结构 在项目中,我们经常会需要一些树状结构的样式来显示层级结构等,比如下图的样式,之前在学.net的时候可以直接拖个服务端控件过来直接使用非常方便.但是利用Jquery的一 ...

  8. oracle存储过程删除树状结构的表数据

    今天在删除一个车辆品牌表的时候,遇到了一个问题,是在java的代码中做逻辑删除还是直接在Oracle中一次删除完成呢 思来想去觉得还是在sql里直接删除比较合适, 为什么呢? 第一,涉及数据库的读写操 ...

  9. 分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限

    大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. ...

随机推荐

  1. tornadod的异步代码

    #!/usr/bin/env python # -*- coding: utf-8 -*- import tornado.httpserver import tornado.ioloop import ...

  2. 打造smali代码库辅助分析

    打造smali代码库辅助分析 在分析Android应用程序的时候,我们往往会插入代码重打包apk来辅助我们分析的工作 一个比较取巧的方法就是先用java写好代码以及相关的调用之后, 然后直接扣出代码 ...

  3. 【转】python编码的问题

    摘要: 为了在源代码中支持非ASCII字符,必须在源文件的第一行或者第二行显示地指定编码格式: # coding=utf-8 或者是: #!/usr/bin/python # -*- coding: ...

  4. nginx负载均衡基于ip_hash的session粘帖

    nginx负载均衡基于ip_hash的session粘帖 nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除 ...

  5. 16进制ascii码转化为对应的字符,付ipmitool查询硬件信息

    最近工作需要在用ipmitool查询服务器硬件信息.ipmitool查询硬件信息 比如电源,使用命令: 获取PSU0信息:Ipmitool raw 0x3a 0x71 0x00: 获取PSU1信息:I ...

  6. 转:Autodesk 2017软件下载+注册机+破解方法(持续更新)

    转载自http://blog.sina.com.cn/s/blog_710225790102w03e.html Autodesk 2017安装步骤: 安装Autodesk 2017相关软件 使用序列号 ...

  7. Swift - 界面的跳转模式

    iOS开发中界面跳转有两种方式,上下跳转和左右跳转. 上下跳转_TO: let secondViewController = SecondViewController() self.presentVi ...

  8. Macbook Pro 使用小记

    本周到手Macbook Pro,很激动.刚刚使用了几天,简单记下自己的感受.   Macbook Pro的硬件配置和做工真没得说,非常完美. 触控板很强大.很好用,鼠标可以基本不用了,但要稍微学习一下 ...

  9. LeetCode 372

    题目: Your task is to calculate a^b mod 1337 where a is a positive integer and b is an extremely large ...

  10. Tortoise SVN 使用帮助

    同步至本地:新建文件夹,SNV checkout 输入用户名密码,确认. 上传文件:将要上传的文件放在一个文件夹里,选择要上传的文件所在的文件夹,右键单击,tortoiseSVN,Import,选择要 ...