使用bootstrap-treeview 插件实现树状结构数据展示

这几天在上网找了bootstrap treeview例子,但是看别人写的demo都是模棱两可,感觉无从下手。因为项目的需要,索性自己也写个。

架构用  ssm+bootstrap

1、底层

1.1、数据库结构,dept部门表结构。

部门表有 id、name、父类id、排序等字段

1.2 mybatis 中的查询语句。

 <!-- 查询部门信息 getDeptTreeList -->
  <select id="getDeptTreeList"  resultType="java.util.HashMap">
    select departmentId as "id",departmentName as "text",parent_id as "parentid"  from sys_dept
  </select>

 注意: 返回的是个hashMap。并且departmentId和departmentName以及parent_id三个字段都使用了treeview需要的别名 。

 2、service业务逻辑层处理。

//查询部门信息 treeview展示
	@Override
	public ArrayList<Map<Object, Object>> getDeptTreeList() {
		// 取出数据
		List<HashMap<Object, Object>> resultMap = sysDeptMapper.getDeptTreeList();
		System.out.println("结果MAP:" + resultMap);
		
		// 定义一个Map集合 存储按指定顺序排列好的菜单
		Map<String, List<Map<Object, Object>>> temp = new HashMap<String, List<Map<Object, Object>>>();
		
		for (HashMap<Object, Object> map : resultMap) {
			// 如果temp的键包含这个parentid
			if (temp.containsKey(map.get("parentid").toString())) {
				// 么把所有相同parentid的数据全部添加到该parentid键下
				temp.get(map.get("parentid").toString()).add(map);
			} else {
				// 初始化temp
				List<Map<Object, Object>> list = new ArrayList<Map<Object, Object>>();
				list.add(map);
				temp.put(map.get("parentid").toString(), list);
			}
		}

		
		// 定义一个完整菜单列表
		ArrayList<Map<Object, Object>> array = new ArrayList<Map<Object, Object>>();

		for (HashMap<Object, Object> hashMap : resultMap) {
			// 如果temp中的键与当前id一致
			if (temp.containsKey(hashMap.get("id").toString())) {
				// 说明temp是当前id菜单的子菜单
				hashMap.put("nodes", temp.get(hashMap.get("id").toString()));
			}
			
			// 遇到顶级菜单就添加进完整菜单
			if (hashMap.get("parentid").toString().equals("0")) {
				array.add(hashMap);
			}
			
		}
		return array;
	}

3、controller 控制层

    //查询部门 tree树形展示
	@RequestMapping("/GetDeptTreeJson")
	@ResponseBody
	public ArrayList<Map<Object,Object>> GetDeptTreeJson() {
		ArrayList<Map<Object,Object>> dept = departmentService.getDeptTreeList();
		return dept;
	}

4、前台页面

4.1、引入相关js和css

<link rel="stylesheet" href="bootstrap/css/bootstrap.css">
<link rel="stylesheet" href="bootstrap/dist/bootstrap-treeview.min.css">
<script type="text/javascript" src="bootstrap-devoops/jquery/jquery-2.1.0.min.js"></script>
<script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script>
<script rel="stylesheet" src="bootstrap/dist/bootstrap-treeview.js"></script>

 4.2、代码

<div id="tree" class="col-md-8 col-lg-3"     style="overflow:auto;display:block;height:900px;width: 400px">
</div>

<script>
    //页面初始化时,发送异步请求,获取tree数据
	var url = "${pageContext.request.contextPath}/department/GetDeptTreeJson.action";
	$.get(url, {}, function(data) {
		init(data);
	}, 'json')
	
	
	//加载tree数据
	var init = function(data) {
		return $("#tree").treeview({
			data : data,
			color:"#428bca",
			levels : 2,
			onNodeSelected : function(event, node) {
				console.log(node.id);
				
				var url = "/demo/user/yy";
				var id = node.departmentId;
				$.post(url, {
					"id" : id
				}, function(data) {
					$("#tbody").empty();
					userInfo(data);
				}, 'json')
			},
			onNodeUnselected:function(event,node){
				console.log("取消了");
			},

		});
	}
</script>

5、下面是treeview的展现部门列表效果

以上仅供参考! 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Bootstrap TreeviewBootstrap 分栏可以很容易地结合使用,以创建一个具有多级层次结构的导航菜单。 下面是一个简单的示例: ```html <div class="container"> <div class="row"> <div class="col-md-4"> <div id="treeview"></div> </div> <div class="col-md-8"> <h1>Content</h1> </div> </div> </div> ``` 在这个示例中,我们使用Bootstrap 的分栏组件来创建一个两列布局。左侧列占据了 4 个网格,右侧列占据了 8 个网格。 左侧列中的 div 元素使用了 id="treeview" 属性,这是我们将要使用 Bootstrap Treeview 插件渲染的容器。 接下来,我们需要引入 BootstrapBootstrap Treeview 的 CSS 和 JavaScript 文件,并在 JavaScript 中初始化 Treeview 插件: ```html <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-treeview/1.2.0/bootstrap-treeview.min.css"> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-treeview/1.2.0/bootstrap-treeview.min.js"></script> <script> $(function() { var data = [ { text: 'Parent 1', nodes: [ { text: 'Child 1', nodes: [ { text: 'Grandchild 1' }, { text: 'Grandchild 2' } ] }, { text: 'Child 2' } ] }, { text: 'Parent 2' }, { text: 'Parent 3' } ]; $('#treeview').treeview({data: data}); }); </script> ``` 在这个示例中,我们创建了一个包含多级层次结构数据对象,并将其传递给 Treeview 插件的 data 选项。 最后,我们在 JavaScript 中使用 $('#treeview').treeview({data: data}) 方法将 Treeview 插件应用于 id="treeview" 的 div 元素。 这样,我们就可以在左侧列中创建一个具有多级层次结构的导航菜单,而右侧列中可以放置任何内容,例如显示所选菜单项的详细信息、表单等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值