树状结构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. HTML文档、javascript脚本的加载与解析

    1.onload事件 1.1 onload事件分类 a.文档加载完成事件(包括脚本.图片等资源都加载完),绑定方法:<body onload="doSomething()"& ...

  2. vmware esxi 找不到网卡驱动,硬盘的解决方法

    解决方法就是把ESXi无法识别的硬件的驱动定制进安装镜像文件中. ESXi 5.5 U2: VMware-VMvisor-Installer-5.5.0.update02-2068190.x86_64 ...

  3. 1.go的Hello

    新建hello.go 内容: package main import ( "fmt" ) func main() { fmt.Println("Hello liuyao& ...

  4. C语言指针类型

    1:只要是指针类型,不管是几级指针[带几个*],其宽度都是4字节 2:任何数据类型[包括自己定义的结构体]前面都能加*号,表示该数据类型的一个指针 3:由于是386处理器,其数据处理的宽度都是四个字节 ...

  5. 编辑 Ext 表格(一)——— 动态添加删除行列

    一.动态增删行 在 ext 表格中,动态添加行主要和表格绑定的 store 有关, 通过对 store 数据集进行添加或删除,就能实现表格行的动态添加删除.   (1) 动态添加表格的行  gridS ...

  6. spring mvc 请求转发和重定向(转)

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

  7. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  8. zookeeper选举原理

    zookeeper的领导者选举和原子广播   目录:     1.工作原理概述     2.Fast Leader选举算法(领导者选举)     3.Leader与Follower同步数据(原子广播) ...

  9. C# 的EF框架怎么连接Oracle数据库

    安装odp.net ODP.NET你不需要安装Oracle,不需要配置oracle.key文件,不需要配置TnsNames.Ora文件 不需要配置环境变量:完全的傻瓜式的在没有安装oracle数据库或 ...

  10. keyCode,charCode,which

    1.触发顺序keydown keypress keyup,但keypress事件只有输入相关按键才会触发,功能按键不会触发keypress事件(keypress事件有个额外的charCode属性) 2 ...