easyUI之tree组件实现思路之前端实现效果

easyui的tree(静态树/动态树) easyui的tree一、tree简介二、tree组件工具类的实现思路三、tree组件工具类的使用四、总结二级目录三级目录 一、tree简介 二、tree组件工具类的实现思路 三、tree组件工具类的使用 四、总结 二级目录 三级目录 ... 阅读详情

将MySQL中的数据传入tree组件实现思路之前端实现效果

前言

前面我已经讲过了后台获取MySQL数据库中的对应json格式的数据,今天我们来把它做成tree!

指路:
获取MySQL数据库中的对应json格式的数据

实现

实现效果:
在这里插入图片描述
注:我这次用的表和上一篇博客不一样!
这次的表:
在这里插入图片描述

实现思路:
在这里插入图片描述

实现流程:
在这里插入图片描述
实现流程代码1:

上面是一个默认的顶级节点为0的是上一篇博客中使用到循环方法
下面是一个传递指定顶级节点的方法
package com.zengjing.vo;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BuildTree {

	/**
	 * 默认0为顶级节点
	 * @param nodes
	 * @param <T>
	 * @return
	 */
	public static <T> TreeVo<T> build(List<TreeVo<T>> nodes) {

		if (nodes == null) {
			return null;
		}
		List<TreeVo<T>> topNodes = new ArrayList<TreeVo<T>>();

		for (TreeVo<T> children : nodes) {
			String pid = children.getParentId();
			if (pid == null || "0".equals(pid)) {
				topNodes.add(children);
			//如果是顶级节点,那么结束当前循环,继续下一次循环
				continue;
			}
			for (TreeVo<T> parent : nodes) {
				String id = parent.getId();
				if (id != null && id.equals(pid)) {
					parent.getChildren().add(children);
					children.setHasParent(true);
					parent.setChildren(true);
					continue;
				}
			}

		}

//		考虑到一个问题,数据库表中本身没有顶级节点
		TreeVo<T> root = new TreeVo<T>();
		if (topNodes.size() == 1) {
			root = topNodes.get(0);
		} else {
//		假如数据库没有顶级节点,就通过代码创建
			root.setId("000");
			root.setParentId("-1");
			root.setHasParent(false);
			root.setChildren(true);
			root.setChecked(true);
			root.setChildren(topNodes);
			root.setText("顶级节点");
			Map<String, Object> state = new HashMap<>(16);
			state.put("opened", true);
			root.setState(state);
		}

		return root;
	}

	/**
	 * 指定idparam为顶级节点
	 * @param nodes
	 * @param idParam
	 * @param <T>
	 * @return
	 */
	public static <T> List<TreeVo<T>> buildList(List<TreeVo<T>> nodes, String idParam) {
		if (nodes == null) {
			return null;
		}
		List<TreeVo<T>> topNodes = new ArrayList<TreeVo<T>>();

		for (TreeVo<T> children : nodes) {

			String pid = children.getParentId();
			if (pid == null || idParam.equals(pid)) {
				topNodes.add(children);

				continue;
			}

			for (TreeVo<T> parent : nodes) {
				String id = parent.getId();
				if (id != null && id.equals(pid)) {
					parent.getChildren().add(children);
					children.setHasParent(true);
					parent.setChildren(true);

					continue;
				}
			}

		}
		return topNodes;
	}

}

实现流程代码2:

返回json格式数据的方法
package com.zengjing.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.zengjing.entity.Menu;
import com.zengjing.util.BaseDao;
import com.zengjing.util.PageBean;
import com.zengjing.vo.BuildTree;
import com.zengjing.vo.TreeVo;



public class MenuDao extends BaseDao<Menu>{

	public List<Menu> list(Menu menu,PageBean pageBean) throws Exception {
		String sql="select * from t_easyui_menu where true";
		return super.executeQuery(sql, Menu.class, pageBean);
	}
	
	
	public List<TreeVo<Menu>> toNode(Menu menu,PageBean pageBean) throws Exception {
		
		List<Menu> list = this.list(menu, pageBean);
	
		List<TreeVo<Menu>> nodes = new ArrayList<TreeVo<Menu>>();
	
		TreeVo treeVo = null;
		
		for (Menu p : list) {
			treeVo = new TreeVo<>();
			treeVo.setId(p.getMenuid());
			treeVo.setText(p.getMenuname());
			treeVo.setParentId(p.getParentid());
			Map<String, Object> attributes = new HashMap<String, Object>();
			attributes.put("self", p);
			treeVo.setAttributes(attributes);
			nodes.add(treeVo);
		}
		
		return BuildTree.buildList(nodes,"-1");
	
	}
	
	
	
	
	
	
	public static void main(String[] args) throws Exception {
		MenuDao md = new MenuDao();
		List<Menu> list = md.list(null, null);
		
		List<TreeVo<Menu>> nodes = new ArrayList<TreeVo<Menu>>();
		
		TreeVo treeVo = null;
		
		for (Menu p : list) {
			treeVo = new TreeVo<>();
			treeVo.setId(p.getMenuid());
			treeVo.setText(p.getMenuname());
			treeVo.setParentId(p.getParentid());
//			Map<String, Object> attributes = new HashMap<String, Object>();
//			attributes.put("self", p);
//			treeVo.setAttributes(attributes);
			nodes.add(treeVo);
		}
		
		TreeVo<Menu> parent = BuildTree.build(nodes);
		ObjectMapper om = new ObjectMapper();
		String jsonstr = om.writeValueAsString(parent);
		System.out.println(jsonstr);
		
		
		
	}
	
}

实现流程代码3:

调用工具类输出json格式的文件
package com.zengjing.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zengjing.dao.MenuDao;
import com.zengjing.entity.Menu;
import com.zengjing.framework.ActionSupport;
import com.zengjing.framework.ModelDriven;
import com.zengjing.util.ResponseUtil;


public class MenuAction extends ActionSupport implements ModelDriven<Menu> {

	private  Menu menu = new Menu();
	private  MenuDao md =   new MenuDao();

	@Override
	public Menu getModel() {
		return menu;
	}
	
	
	public String menuTree(HttpServletRequest req,HttpServletResponse resp) {
		try {
			ResponseUtil.writeJson(resp, this.md.toNode(null, null));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

}

涉及到的ResponseUtil:

package com.zengjing.util;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import com.fasterxml.jackson.databind.ObjectMapper;

public class ResponseUtil {
	public static void writeJson(HttpServletResponse response,Object o)throws Exception{
		response.setContentType("text/html;charset=utf-8");
		ObjectMapper om = new ObjectMapper();
		String jsonstr = om.writeValueAsString(o);
		PrintWriter out=response.getWriter();
		out.println(jsonstr.toString());
		out.flush();
		out.close();
	}
}

总结

在写代码中我们的思维需要更加灵活,不能太过于死板的像写作文一样噼里啪啦写下去!越学习到后面理解越深!

JSP+Mysql实现的简单树形结构 一个简单的MYSQL+JSP的树形结构 希望对你有帮助 立即下载

相关推荐

Mamba再封神!与YOLO结合,拿下二区!好发不卷!

相比传统的YOLO改进,Mamba是新技术,两者结合尚在蓝海阶段,可发挥空间大!更为关键的是,它在检测精度和速度方面,都让以往的YOLO模型难以望其项背!比如代表模型Mamba YOLO,便在参数减少45.5%、FLOPs减少50%的同时,精度还比YOLOv8高6.1%!这主要得益于,Mamba能够捕捉长期依赖关系,而YOLO则擅长捕捉局部特征,两者能够优势互补,且Mamba线性复杂度的特性,也有利于提高计算效率!为了让大家能够紧跟前沿发展,找到更多灵感启发,我给大家10种。

2401_88190197的博客 2506

MySQL递归查询 三种实现方式

我是以山东济南的行政区划作为示例的,数据库是MySQL 话不多说,直接上示例代码! 感觉阅读麻烦的伙伴可以直接下载资源:点我下载 1.建表脚本 1.1.建表 DROP TABLE IF EXISTS `sys_region`; CREATE TABLE `sys_region` ( `id` int(50) NOT NULL AUTO_INCREMENT COMMENT '地区主键编号', `name` varchar(50) CHARACTER SET utf8 COLLATE ut

徐本锡的专栏 122万+

【科研绘图】【数据拟合曲线】:附Origin详细画图流程

拟合曲线图

weixin_50236590的博客 4万+

Easyui,好的设计思路

就是在这里,可以以一个表格的形式展现给我们用户,使用户获得更多的信息。 转载于:https://www.cnblogs.com/MyFlora/archive/2012/08/30/2664130.html

162

动手学Moveit2 | 运行配置好的机械臂功能demo

通过这个小demo你可以直观的感受moveit2的强大,但还有很多需要我们探索的,比如机械臂是如何规划的,规划的过程中如何结合环境信息,规划的时候机械臂如何求解,如何和真实的机械臂对接等等,这些都需要你来进一步探索,今天就到这里,明天给大家秀一下小仙女焊的fishbot运控板。

生活不止眼前的苟且 8879

带有验证码的爆破(包含Burp suite工具爆破)

关于含有验证码爆破的一些总结!

weixin_43960066的博客 8693

EasyUI之Tree结构实现

目录Tree(树)结构的两种方式实现步骤及注意点Tree案例源码及效果 Tree(树)结构的两种方式 首先我们看一下官方文档中的使用介绍: 第一种方式,就是在HTML页面直接引入,效果如下: 但是我们在实际项目中,不可能在页面绑定固定的值,如果在上面这种方式中,使用jQuery传入Json值,又显得太过于多余,所以,EasyUI还提供了一种更为便捷的方式实现: 实现步骤及注意点 这篇博文主要使用第二种简便开发的方式去介绍使用步骤,首先我们要清楚EasyUI的Tree结构的原理: 页面定义一个空 ul标签

Dawn.x的博客 896

[Dify实战] Bug 自动归因与复现指南生成器-带绑定资源

摘要: 本文介绍如何利用Dify构建"Bug自动归因与复现指南生成器",解决研发测试中的常见痛点。该系统可自动解析Bug信息,结构化输出复现步骤、可能原因、修复建议和回归测试点,显著提升问题处理效率。文章详细阐述了方案流程、Prompt设计要点、输出模板及落地清单,并提供了RCA分析模板和标准复现步骤示例。通过统一Bug描述模板和自动化分析,该系统能有效降低人力成本,加速问题闭环,适用于持续迭代的中大型项目。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 294

easyui之tree前端实现

一,tree 树控件在web页面中一个将分层数据以树形结构进行显示。它提供用户展开、折叠、拖拽、编辑和异步加载等功能 2、树的数据格式 [{ "id":1, "text":"My Documents", "children":[{ "id":11, "text":"Photos", "state":"closed", "children":[{ "id":111, "text":"Friend" },{ "id":112, "text":...

xyy_0517的博客 382

目前固态激光雷达在机器人领域的应用难点汇总

固态激光雷达在机器人领域面临性能与成本的双重挑战:探测性能上,动态范围不足(60-80dB)导致高/低反射物体识别困难,近距盲区(30-50cm)与长距精度(±3cm)矛盾突出;结构上视场角与点云密度难以平衡,多雷达拼接又带来同步误差。成本方面,核心元件(SPAD/OPA芯片)良率低(<50%)、校准工序复杂,单机成本超200美元。环境适应性上,粉尘附着、振动偏移(±2°)和光衰(1万小时衰减15%)制约可靠性。

start_up_go的博客 481

北斗导航 | ILS(仪表着陆系统)、MLS(微波着陆系统)和GBAS(地基增强系统)的性能对比

最 早 的 GBAS 系 统 是 **局 域 增 强 系 统(LAAS)**,它是 1990 年由美国 Honeywell 公司 和 NASA 共 同 完 成 的 差 分 GPS(DGPS)演 变 而 来 的。1998 年,LAAS 被 ICAO 采 纳为 GBAS。2009 年 9 月 3 日 Honeywell 公 司 的GBAS 系统通过了 **CAT-I 精密进近着陆系统**的设计认证 ,而 **CAT-II 和 CAT-III 系统的研发和验证工作也正在有序的进行中**

尘世冰封的专栏 3984

Tree组件实现

Tree组件实现前言在前端实现tree组件解决问题的思路 前言 这篇文章是继上篇文章的后续, easyui的入门以及tree组件的后端 现在说一下如何在前端实现 在前端实现tree组件 首先先看一下效果: 导入依赖jar包 继上次的代码之后,在PermissionDao中添加一个能够将数据库中的数据体现出父子结构的方法 public List<TreeVo<Permission>> topNode(Permission permission,PageBean pageBean) t

qq_46705598的博客 405

【OS】AUTOSAR架构下MCAL Modules软件分区问题分析

AUTOSAR架构下MCAL Modules软件分区问题分析

qq_36056498的博客 939

tree前端实现:

前言:昨天与大家分享了EasyUI的基础知识,基础知识还是简单,倒是越到后面代码量就会越来越多,而今天跟大家分享的是tree前端实现。 一、目标:使用tree控件和tabs控件要达到的效果: 这个效果要用到tree控件以及tabs控件共同完成的效果,左边则是tree控件的实现效果,右边内容摘要的效果则是tabs控件实现的效果。 整体思路: 1、首先要在js文件专门建一个写js代码的file文件(index.js) 2、将我们需要的t...

m0_53151031的博客 1368

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jQuery Easyui Tree组件

文章目录前言动态树思路和流程代码实现案例实现效果 前言 Tree组件的话来做权限方面的很好,基于树组件的话分为两种,静态树和动态树,静态树的话代码比较冗余死板,动态树配合ajax+json实现从数据库调用显示方便灵活。 动态树 使用树控件先定义一个空ul元素中并使用Javascript加载数据。 <ul id="tt"></ul> 创建js文件进行json数据加载 $('#tt').tree({ url:'tree_data.json' });

qq_45384482的博客 786

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Tree前端实现

一.本章实现目标: 需要用到tree控件和tabs控件:tree实现左侧的菜单栏效果,tabs实现右边摘要内容 二.思路步骤: 1、首先要在js文件专门建一个写js代码的file文件(index.js) $(function(){ $('#stuMenu').tree({ url:'tree_data1.json' , onClick: function(node){ // alert(node.text); /...

m0_52681702的博客 296

easyui里面的加载tree的两种方式

第一种: 使用EasyUI中Tree 符合EasyUI中Tree的Json格式,我们先看一下,格式是如何的 [{ "id":1, "text":"My Documents", "children":[{ "id":22, "text":"Photos", "state":"closed", "children":[{ "id"...

atoqkolgpvlif6615的博客 239

easyUI中的tabs组件及关闭选项卡操作

easyUI中的tabs组件一级目录二级目录三级目录 一级目录 二级目录 三级目录

men_ma的博客 1498

tree前端实现

一,tree控件的使用 思路: 1、首先要在js文件专门建一个写js代码的file文件(index.js) 2、将我们需要的tree-data1-json文件导入到web—content中 3、最后新建两个要跳转的jsp界面来实现菜单点击效果。 树控件使用<ul>元素定义。标签能够定义分支和子节点。节点都定义在<ul>列表内的<li>元素中。 <div c...

qq_53601862的博客 447

easyUI前端框架的tree(树)前台展示(树形菜单二)——java

easyUI前端框架的tree前台展示一级目录二级目录三级目录 一级目录 二级目录 三级目录

men_ma的博客 1650

Easyui入门(二)

Easyui入门之Tree后台实现tree的组件简介案例1:运行结果:2、tree组件工具类的实现思路预热方案代码链接代码2:正式从数据库拿数据写代码代码2 tree的组件简介 静态的html方式: 缺点:如果树形结构复杂,层级较多,那么c:foreach以及c:if的嵌套就会比较多,不方便编码 通过java代码以及jackson 的jar包来生产对应的格式数据(能够格式这么来)查询数据库,拿到需要的数据 TreeVo,BuildTree BuildTree核心思想

yoonbongchi的博客 723

jquery easyui tree reload以后选中之前选择的节点

问题背景: 界面使用左侧tree,右侧datagrid的布局。 点击左侧的树节点,右侧显示当前节点下的数据,右侧操作完以后左侧树的数据会发生改变,所以左侧的树需要刷新(reload)。 刷新完以后,树的选中状态没了。 解决办法: 思路:点击左侧树的节点时记录点击的nodeId,加载完以后重新选择该节点。 代码实现: var nodeId; $(function(){

已注销 1万+

easyui入门

在开头跟大家分享的时候我就说,面试我是没有做好准备的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准备好了或许可以拿个40k,没做准备只有30k+,你们懂那种感觉吗)如何准备面试?1、前期铺垫(技术沉积)程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求主要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。

disrm84160的博客 444

tree后端实现

前言:上次与大家分享了tree前端的实现,为了展现一个完整的效果,在之前的数据都是静态的,今天我们将实现数据动态的效果,也就是说连接数据库---tree后端的实现。 一、明确目标: 今天将要实现的是动态数据的效果,将数据库的数据展现在页面上。 之前效果: 今天要实现的效果:(这些效果是数据库中的数据) 二、具体思路以及代码实现: 一、思路:首先毋庸置疑的是取到数据,之后就是将数据从以前的平级结构变成父子结构,最后将效果展现出来。 ...

m0_53151031的博客 645

jQuery Easyui tabs组件

文章目录选项卡的使用1.html中使用动态加载选项卡1.新增tabs2.配合Tree控件3.实现原理鼠标右键关闭标签,全部/其他 选项卡的使用 当用户不需要同时看到多个选项标签中的内容时,这个时候我们就可以用选项卡组件了。 关于选项卡的使用,官方文档提供很多的使用方法及帮助,我们主要围绕官方文档来进行开发。 1.html中使用 我们只需要引入代码,它就会生成tabs页这种写的比较死,我们需要的是点击菜单去打开不同的菜单页和对于的内容。 动态加载选项卡 1.新增tabs 因为我们需要点击菜单去加载并打开

qq_45384482的博客 710

easyui tree 会变的慢很多_让你渲染速度从14.65s到0.49s的前端tree优化实践

全篇主要思想:递归的本质是栈的读取。先看效果对比以下都是基于 10000 条子节点数据作对比,先上最终数据对比:递归版 tree,渲染速度: 14.65s,点击节点处理速度: 9.83s优化版 tree,渲染速度: 0.49s,点击节点处理速度: 0.18s递归组件实现 tree:渲染速度 15.71s -1.06s = 14.65s1- 递归版 tree 性能图递归组件版 tree 点击节点性能...

weixin_39717029的博客 710
上一篇: easyUI动态tree组件实现思路之后台获取json格式数据
下一篇: easyUI的tab选项卡以及右击菜单
Jiang呀
博客等级 码龄7年 16粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值