artDialog弹窗+Ztree树从后台获取数据

本文介绍了如何结合ArtDialog弹窗和Ztree树插件,从后台获取并显示数据。首先,提供了artDialog和Ztree的官方学习资源及下载链接。接着,展示了如何引入和配置这两个组件的CSS和JS文件。在前端布局完成后,重点讲解了后台控制器和服务层如何生成符合Ztree要求的JSON数据结构,尤其是处理嵌套结构的难点。最后,展示了YGDept类的数据模型,并预告了后续关于搜索功能的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单的ArtDialog+Ztree
样子就是这个了
在这里插入图片描述

学习artDialog的前去artDialog 4.1.7,我们需要的都可以在这里下载。小案例可以看这个*artDialog 4.1.7精简版*
学习ztree的来这个网站Ztree-Jquery树插件,里面是详细的ztree的配置和参数

这个是下载的artDialog
这里写图片描述
skins里面是各种弹窗的皮肤,这两个放到你的项目中。
然后就是引入js文件和你想要的皮肤了

这个是下载的ztree,连有详细的api(有中文版和英文版)和js、css文件
这里写图片描述
将js和css两个文件夹直接拷贝到项目中

<link rel="stylesheet" href="${pageContext.request.contextPath }/ztree/css/demo.css" type="text/css">
<link rel="stylesheet" href="${pageContext.request.contextPath }/ztree/css/zTreeStyle/zTreeStyle.css" type="text/css">

<script type="text/javascript" src="${pageContext.request.contextPath }/lib/jquery/jquery-1.9.0.min.js"></script>

<script type="text/javascript" src="${pageContext.request.contextPath }/artDialog/dist/artDialog.js?skin=chrome"></script>
//js和skin这个文件夹一定要在同一级
<script type="text/javascript"
	src="${pageContext.request.contextPath }/ztree/js/jquery.ztree.core.js"></script>//ztree

如果遇到有一些控件没有效果的时候,再引入其他的js文件就行了,一般情况下,这个jquery.ztree.core.js就可以了满足了。

<div id="dialogContext" style="display: none;background-color: white;">
	<div>
		<input type="text" id="searchTreeText">
		<button type="submit" id="searchBtnTree">搜索</button>
		<button type="submit" id="choiceBtn">选择</button>
		<button type="submit" id="reset">重置</button>
	</div>
	<div class="content_wrap">
		<div class="zTreeDemoBackground">
			<ul id="treeMenu" class="ztree" style="width: 400px"></ul>
		</div>
	</div>
</div>

这里的布局是弹窗的内容 包含一些按钮和一个ztree树

var dialog;//弹窗
var ztree;//ztree树
var treeNode;//树节点

//弹窗
$("#dialogTree").click(function(event) {
	dialog = art.dialog({
		title : '选择树',//弹窗的标题
		//弹窗的内容,放ztree树
		content : document.getElementById("dialogContext"),
		lock : true,//开启锁屏,中断用户和对话框以外的活动
		background : '#FFFAFA'//此处用单引号
	});
});

//树的初始化的设置(这个setting设置,有其他需要的就多看一下api文档中setting的详细介绍)
$.windowbox = {  
   		treeInit:function(){
			var setting = {
				check : {
					chkStyle : "radio",//设置为单选框
					enable : true,//设置节点上是否开启checkBox/radio
					radioType : "all"//在整棵树范围内当做一个分组。
				},
				data : {
					simpleData : {//简单数据格式
						enable : true
					}
				},
				view : {
					expandSpeed : "fast",
					fontCss : setFontCss
				}
			};
			ztree = $.fn.zTree.init($("#treeMenu"), setting, treeNode);//树的初始化操作(这个是最重要的,最后一个参数是树节点,可以自己设置或者后台取)
			//以下可以根据自己的需要去选择是否填写
			var node = ztree.getNodeByParam("id", 1, null);//获取id为1的节点
			ztree.checkNode(node, true, true);//默认选中该节点
			ztree.expandNode(node, true, false, true);//默认展开该节点
			$("#dialogTree").val(node.name);//将默认选中的节点放入输入框中
	}
}

//我的treeNode是用ajax从后台获取的
$.ajax({
		async : false,//同步请求
		type : "GET",
		dataType : "json",
		url : "ztree.do",
		success : function(data) {
			treeNode = data;
			$.windowbox.treeInit();//
		}
});

前台布局好之后,就是后台获取数据的代码了
controller的代码

@RequestMapping("ztree.do")
@ResponseBody
public void getZtreeData(HttpServletResponse response) {
	List<YGDeptT> tree = ygService.getDept();
	PrintWriter out = null;
	try {
		response.setContentType("text/json");
		response.setCharacterEncoding("UTF-8");
		out = response.getWriter();
		//我们用的ztree需要的json对象,而不是json字符串
		JSONArray jsonArray = JSONArray.fromObject(tree);
		out.print(jsonArray);
		out.flush();
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		if (out != null) {
			out.close();
		}
	}

}

其中json数据的格式是
在这里插入图片描述
id:节点的id
name:节点的name
children:节点的子节点,里面是子节点的id,name,children
在这里插入图片描述

对我来说最难的就是将所有的数据弄成这个格式的嵌套的格式了,问了同事和同学才想明白,简直头疼,哭唧唧~

service层

/**
 * 获取机构树
 * 
 * 过程:从数据库拿到数据后,放到一个以机构id为key,此对象为value的map中。循环map,将parentID拿到,
 * 判断是否有以parentId为key的对象,如果没有,将空对象赋值,判断是否有子节点,空则初始化,有则add
 * 然后在空对象中添加parentID的对象; 如果有,判断子节点是否为空,空则初始化,有则add 最后放到一个list中返回
 */
public List<YGDeptT> getDept() {
	List<YGDeptT> rootList = new ArrayList<YGDeptT>();
	Map<Integer, YGDeptT> treeMap = ygDao.getDept();// 从数据拿到数据,以id为key
	Map<Integer, YGDeptT> treeMap2 = new HashMap<Integer, YGDeptT>();

	for (Map.Entry<Integer, YGDeptT> map : treeMap.entrySet()) {
		YGDeptT deptT = map.getValue();
		int parentId = deptT.getParentid();// 获取父亲id
		YGDeptT ygRoot = treeMap.get(parentId);
		// 如果没有以该id为key的对象,则为根节点
		if (ygRoot == null) {
			treeMap2.put(deptT.getId(), deptT);
			continue;// 跳过本次循环,执行下次循环
		}
		if (ygRoot.getChildren() == null) {
			List<YGDeptT> node = new ArrayList<YGDeptT>();
			ygRoot.setChildren(node);
		}
		ygRoot.getChildren().add(deptT);
	}
	for (Map.Entry<Integer, YGDeptT> entry : treeMap2.entrySet()) {
		rootList.add(entry.getValue());
	}
	return rootList;
}

这是最终成功的代码,有没有搞明白的再问我吧。

YGDept类

private int id;
private String name;
private int parentid;
private List<YGDeptT> children;

public List<YGDeptT> getChildren() {
	return children;
}

public void setChildren(List<YGDeptT> children) {
	this.children = children;
}

public int getId() {
	return id;
}

public void setId(int id) {
	this.id = id;
}

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

public int getParentid() {
	return parentid;
}

public void setParentid(int parentid) {
	this.parentid = parentid;
}

哦了,这样我们的数据就能够拿到了。我们就可以了看到最终的效果就是最开始的那张图片了。
搜索的实现我下次再写了,如果能帮到大家那就很开心了~

转载请说明地址并通知我,谢谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值