使用插件bootstrap-treeview构建树形结构,使用JAVA递归构建树形结构的数据

最近把项目中的树形插件换成了bootstrap-treeview,把使用过程中的事情和大家分享一下。

1、下载bootstrap-treeview插件,把css和js引入到项目中

 <!-- bootstrap-treeview -->
 <link rel="stylesheet" href="${path}/js/bootstrap-treeview/css/bootstrap-treeview.css">
 <!-- bootstrap-treeview -->
<script src="${path}/js/bootstrap-treeview/js/bootstrap-treeview.js"></script>

2、使用插件构建树形结构

$.ajax({
		url:'selectModelList',
		type:'post',
		dataType: "json",
		success:function(result){
			$('#modelTreeView').treeview({
				data: result.data,         // 数据源
				showTags: false,
				showCheckbox: true,   //是否显示复选框
				showBorder: false,
				onhoverColor:"#F9F9F9",
				selectedBackColor:"#1e9fff",
				highlightSelected: true,    //是否高亮选中
				// multiSelect: false,    //多选
				levels : 1,
				enableLinks : true,//必须在节点属性给出href属性
				color: "#010A0E",
				onNodeChecked : function (event,node) {
					var selectNodes = getChildNodeIdArr(node); //获取所有子节点
					if (selectNodes) { //子节点不为空,则选中所有子节点
						$('#modelTreeView').treeview('checkNode', [selectNodes, { silent: true }]);
					}
				},
				onNodeUnchecked : function(event, node) { //取消选中节点
					var selectNodes = getChildNodeIdArr(node); //获取所有子节点
					if (selectNodes) { //子节点不为空,则取消选中所有子节点
					 	$('#modelTreeView').treeview('uncheckNode', [selectNodes, { silent: true }]);
					}
				},
				onNodeExpanded : function(event, data) {
				},
				onNodeSelected: function (event, data) {
				}
			})
		},
		error: function () {
			alert("树形结构加载失败!")
		}
	})

3、构建bootstrap-treeview需要的数据结构
bootstrap-treeview需要的数据结构用例

var defaultData = [
	{
		text: '生物质热电联产项目',
		nodes: [
			{
				text: '建筑',
				nodes: [
					{
						text: '站台层建筑',
					},
					{
						text: '展厅层建筑',
					}
				]
			},
			{
				text: '结构',
			}
		]
	},
	{
		text: '嘉年华站',
	},
	{
		text: '泰山路站',
	}
];

使用JAVA递归,结合Mysql函数为树形结构提供数据
controller接口

	/**
	 * 模型选择
	 * @return 画面
	 * @throws Exception 异常
	 */
	@RequestMapping(value="/selectModelList")
	@ResponseBody
	public ResultModel selectModelList(HttpServletRequest request, Model model) throws Exception{
		ModelPro modelPro = new ModelPro();
		modelPro.setModel_parent(0);
		List<ModelPro> comList = modelService.patchList(modelPro);
		List<ModelPro> baseList = new ArrayList<ModelPro>();
		JSONArray ja;
		if(comList != null && comList.size() > 0){
			tempModelLst = new ArrayList<ModelPro>();
			for (ModelPro baseModel : baseList) {
				tempModelLst = modelService.getAllModelByRootID(baseModel.getId());
				baseModel.setNodes(editModelLst(baseModel.getId()));
			}
		}
		return ResultModel.success(modelService.listToJson(baseList));
	}

递归获取下级子

	/**
	 * 递归编辑子级模型
	 * @param model_id 模型id
	 * @return 结果集
	 * @throws Exception 异常
	 */
	private List<ModelPro> editModelLst(int model_id) {
		List<ModelPro> retModelLst1 = new ArrayList<ModelPro>();
		// 取出model_id的下属模型
		List<ModelPro> modelLst = getTreeModelList(model_id);
		for (ModelPro model : modelLst) {
			List<ModelPro> ja = editModelLst(model.getId());
			// 克隆对象
			ModelPro newModel = (ModelPro)model.clone();
			newModel.setNodes(ja);
			retModelLst1.add(newModel);
		}
		return retModelLst1;
	}

	/**
	 * 通过模型ID获取下面的直接子级模型
	 * @param model_id 模型id
	 * @return 结果集
	 */
	private List<ModelPro> getTreeModelList(int model_id) {
		List<ModelPro> retLst = new ArrayList<ModelPro>();
		for (ModelPro model : tempModelLst) {
			if (model.getModel_parent() == model_id) {
				retLst.add(model);
			}
		}
		return retLst;
	}

mapper下用到的SQL语句

	<!-- 获取数据列表 -->
	<select id="patchList" resultMap="BaseResultMap" parameterType="com.dj.bimsys.manager.pojo.ModelPro" >
		SELECT <include refid="Base_Column_List" />, model_name as text
		FROM dj_model
		WHERE if_delete = 'T' and model_parent = #{model_parent,jdbcType=INTEGER}
		ORDER BY model_sort ASC,id DESC
	</select>

	<!-- 通过parentid获取下面所有的id -->
	<select id="getAllModelByRootID" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
		SELECT <include refid="Page_Column_List" />, c.model_name as text
		FROM dj_model c
		WHERE FIND_IN_SET(c.id, getChildLst(#{modelId}))
		ORDER BY c.model_parent ASC, c.id ASC
	</select>

SQL语句中使用的自定义函数getChildLst

BEGIN
    DECLARE sTemp VARCHAR(1000);
    DECLARE sTempChd VARCHAR(1000);
    SET sTemp = '$';
    SET sTempChd =cast(rootId as CHAR);

    WHILE sTempChd is not null DO
      SET sTemp = concat(sTemp,',',sTempChd);
      SELECT group_concat(id) INTO sTempChd FROM dj_model where FIND_IN_SET(model_parent, sTempChd)>0;
    END WHILE; 
  RETURN sTemp;
END

4、通过以上的数据,bootstrap-treeview的最终展示效果
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值