(一)easyUI之树形网络

  • 树形网格(TreeGrid)可以展示有限空间上带有多列和复杂数据电子表

    一、案例一:按tree的数据结构来生成

  • 前台
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html >
<html>
<%String path = request.getContextPath();
%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"href="<%=path%>/script/easyUI-1.4/themes/bootstrap/easyui.css">
<link rel="stylesheet" type="text/css"href="<%=path%>/script/easyUI-1.4/themes/icon.css">
<script type="text/javascript"src="<%=path%>/script/easyUI-1.4/jquery-1.8.3.min.js"></script>
<script type="text/javascript"src="<%=path%>/script/easyUI-1.4/jquery.easyui.min.js"></script>
<script type="text/javascript"src="<%=path%>/script/easyUI-1.4/locale/easyui-lang-zh_CN.js"></script>
</head><script type="text/javascript">jQuery(function(){$('#tt').treegrid({    url:"<%=path%>/servlet/treeGrid",    method: 'post',lines: true,rownumbers: true,//定义关键字段来标识树节点
            idField: 'dept_id',//treeField属性定义哪个字段显示为树形菜单
            treeField: 'dept_name',columns:[[    {title:'部门名称',field:'dept_name',width:180},    {title:'平均薪水',field:'salary',width:60,align:'right'},    {title:'部门地址',field:'address',width:80}  ]]    });  });
</script><body>
<h2>树形网格treeGrid</h2>
<table id="tt" style="width:600px;height:400px"></table>  
</body>
</html>
  • 后台
package servlet;import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;import com.google.gson.Gson;import bean.Dept;
import util.DBUtil;/*** Servlet implementation class DeptServlet*/
@WebServlet("/servlet/treeGrid")
public class DeptServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.setContentType("text/html");PrintWriter out=response.getWriter();String treeGrid_json="";String sql="";Connection conn=null;try {conn=DBUtil.getConn();QueryRunner queryRunner=new QueryRunner();sql="select * from dept";List<Map<String,Object>> treeGridData=new ArrayList<Map<String,Object>>();Map<String,Object> deptMap=null;List<Dept> deptList=queryRunner.query(conn,sql,new BeanListHandler<>(Dept.class));Map<String,Map<String,Object>> id_map=new HashMap<String,Map<String,Object>>();for(Dept dept:deptList){deptMap=new HashMap<String,Object>();deptMap.put("dept_id", dept.getDept_id());deptMap.put("dept_name", dept.getDept_name());deptMap.put("salary", dept.getSalary());deptMap.put("address", dept.getAddress());id_map.put(dept.getDept_id(), deptMap);if(dept.getGrade()>2){deptMap.put("state", "closed");}if(dept.getParent_id().equals("0")){//如果是父节点,则直接添加到treeGridData中treeGridData.add(deptMap);}else{//如果是子节点Map<String,Object> parenMap=id_map.get(dept.getParent_id());if (parenMap != null) {List<Map<String, Object>> children = null;if (parenMap.get("children") == null) {// 说明该父节点当前还没有一个子节点children = new ArrayList<Map<String, Object>>();} else {children = (List<Map<String, Object>>) parenMap.get("children");}children.add(deptMap);parenMap.put("children", children);}}}Gson gson=new Gson();treeGrid_json=gson.toJson(treeGridData);out.println(treeGrid_json);out.flush();out.close();} catch (Exception e) {e.printStackTrace();}}}

结果:

  • 异步树请参考前几章。

 

 

 二、案例二:按Grid的数据结构来生成+查询功能

  •  数据库

  • 定义数据库函数:用于用于根据某个节点的所有父节点
BEGIN   
DECLARE fid varchar(100) default '';   
DECLARE str varchar(1000) default rootId;   WHILE rootId is not null  do   SET fid =(SELECT parent_id FROM dept WHERE dept_id = rootId);   IF fid is not null THEN   SET str = concat(str, ',', fid);   SET rootId = fid;   ELSE   SET rootId = fid;   END IF;   
END WHILE;   
return str;  
END
  • 前台
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html >
<html>
<%String path = request.getContextPath();
%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css"href="<%=path%>/script/easyUI-1.4/themes/bootstrap/easyui.css">
<link rel="stylesheet" type="text/css"href="<%=path%>/script/easyUI-1.4/themes/icon.css">
<script type="text/javascript"src="<%=path%>/script/easyUI-1.4/jquery-1.8.3.min.js"></script>
<script type="text/javascript"src="<%=path%>/script/easyUI-1.4/jquery.easyui.min.js"></script>
<script type="text/javascript"src="<%=path%>/script/easyUI-1.4/locale/easyui-lang-zh_CN.js"></script>
</head><script type="text/javascript">jQuery(function(){$('#tt').treegrid({    url:"<%=path%>/servlet/treeGrid",method : 'post',lines : true,rownumbers : true,//定义关键字段来标识树节点
            idField : 'dept_id',//treeField属性定义哪个字段显示为树形菜单
            treeField : 'dept_name',columns : [ [ {title : '部门名称',field : 'dept_name',width : 180}, {title : '平均薪水',field : 'salary',width : 60,align : 'right'}, {title : '部门地址',field : 'address',width : 80} ] ],toolbar: '#search_div'});});function doSearch(value,name){var paramData={name:value};$('#tt').treegrid({ queryParams:paramData});}</script><body><h2>树形网格treeGrid</h2><div id="search_div"><input class="easyui-searchbox" style="width: 300px"data-options="searcher:doSearch,prompt:'Please Input Value'" name="keyWord"></input></div><table id="tt" style="width: 600px; height: 400px"></table>
</body>
</html>
  • 后台
package servlet;import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapListHandler;import com.google.gson.Gson;import util.DBUtil;/*** Servlet implementation class DeptServlet*/
@WebServlet("/servlet/treeGrid")
public class DeptServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse*      response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse*      response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.setContentType("text/html");PrintWriter out = response.getWriter();Connection conn = null;Statement stat = null;ResultSet rs = null;String sql = "";String keyWord = request.getParameter("name");if (keyWord == null  || keyWord.equals("")) {// 如果没有查询参数sql = "select * from dept";} else {/*** 如果游查询参数 1.先找出子菜单*/String tempSQL = "select dept_id,dept_name from dept where dept_name like '%" + keyWord+ "%'  order by dept_id asc ";try {conn = DBUtil.getConn();QueryRunner queryRunner = new QueryRunner();List<Map<String, Object>> temList = queryRunner.query(conn, tempSQL, new MapListHandler());StringBuffer unionSQL = new StringBuffer();int rowIndex = 0;for (Map<String, Object> temMap : temList) {String tem_dept_Id = String.valueOf(temMap.get("dept_id"));/*** 2.根据得到的tem_dept_Id,去寻找相应的子节点* 请在数据库中定义一个函数,该函数用于根据某个节点的所有父节点*/unionSQL.append("select dept_id from dept where FIND_IN_SET(dept_id,getParentList('" + tem_dept_Id + "'))");rowIndex++;if (rowIndex > 0 && rowIndex != temList.size()) {unionSQL.append(" union ");}}if (unionSQL.length() > 0) {sql = "select * from dept where dept_id in(";sql = sql + unionSQL.toString();sql = sql + ")";}} catch (Exception e) {e.printStackTrace();}}try {conn = DBUtil.getConn();stat = conn.createStatement();rs = stat.executeQuery(sql);List<Map<String, String>> gridDataList = new ArrayList<Map<String, String>>();Map<String, Object> gridDataMap = new HashMap<String, Object>();Map<String, String> columnMap = null;while (rs.next()) {String id = (String.valueOf(rs.getInt("dept_id")));String parent_id = (String.valueOf(rs.getInt("parent_id")));String dept_name = rs.getString("dept_name");String salary = rs.getString("salary");String address = rs.getString("address");columnMap = new HashMap<String, String>();columnMap.put("dept_id", id);columnMap.put("dept_name", dept_name);columnMap.put("salary", salary);columnMap.put("address", address);/*** 加入树形表格的特殊属性,一定要加否则样式不成树状*/if (parent_id.equals("0") == false) {columnMap.put("_parentId", parent_id);}gridDataList.add(columnMap);}gridDataMap.put("total", gridDataList.size());gridDataMap.put("rows", gridDataList);Gson gson = new Gson();String str_gridData = gson.toJson(gridDataMap);System.out.println(str_gridData);out.print(str_gridData);} catch (Exception e) {e.printStackTrace();}out.flush();out.close();}}

结果:

 

转载于:https://www.cnblogs.com/shyroke/p/7724622.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《看聊天记录都学不会C语言?太菜了吧》(4)零基础的我原来早就学会编程了?

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖…

二叉树结构 codevs 1029 遍历问题

codevs 1029 遍历问题 时间限制: 1 s空间限制: 128000 KB题目等级 : 钻石 Diamond题目描述 Description我们都很熟悉二叉树的前序、中序、后序遍历&#xff0c;在数据结构中常提出这样的问题&#xff1a;已知一棵二叉树的前序和中序遍历&#xff0c;求它的后序遍历&#xff0c;…

java的概率的程序_java实现一个抽奖概率类

在一些项目需求中&#xff0c;可能会遇到抽奖问题&#xff0c;如提供一系列奖品及获奖概率&#xff0c;要求根据概率返回每次抽到的奖品。以下是本人在实际项目中写的一个抽奖工具类&#xff0c;与大家共同分享&#xff1a;import java.util.ArrayList;import java.util.List;i…

【空间数据库】ArcGIS10.6连接PostgreSQL数据库并显示数据至ArcMap中

前面的文章《【开源数据库】Windows操作系统PostgreSQL+PostGIS环境搭建图文安装教程 》讲解了在Windows上安装开源GIS和开源数据库。本文接着来讲采用ArcGIS 10.6连接PostgreSQL数据库,并加载矢量数据到ArcMap中。 我们已经在pgAdmin中创建了一个空间数据库test,并导入了Sha…

算法-低位优先的字符串排序

低位优先的字符串排序相当于是对键索引计数方法的一个扩展&#xff0c;主要用于处理固定长度字符串&#xff0c;比如说手机号&#xff0c;固定电话&#xff0c;银行卡卡号&#xff0c;字符串的长度为N&#xff0c;从右向左开始进行每个键作为值开始遍历&#xff0c;实现比较简单…

使用 AgileConfig 动态配置 NLog

NLog 是我们在 .NET 领域使用非常广泛的日志组件。它默认使用 xml 来维护它的配置。最近有几个同学问我当使用 AgileConfig 的时候如何配置 NLog 。因为 AgileConfig 不支持集成 xml 格式的配置。其实 NLog 是支持从 appsettings.json / IConfiguration 读取配置的&#xff0c;…

《看聊天记录都学不会C语言?太菜了吧》(5)打了一把游戏我学会了一个编程知识?

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖…

【QGIS入门实战精品教程】2.1:初识QGIS软件

从今天开始&#xff0c;我们一起来学习一款免费开源、对机器要求低、功能强大的GIS软件&#xff1a;QGIS &#xff01; 一、QGIS简介 QGIS&#xff08;原称Quantum GIS&#xff09;是一个自由软件的桌面GIS软件。它提供数据的显示、编辑和分析功能。 QGIS是一个用户界面友好的…

使用 VS Code + Markdown 编写 PDF 文档

1背景介绍 作为一个技术人员&#xff0c;基本都需要编写技术相关文档&#xff0c;而且大部分技术人员都应该掌握 Markdown 这个技能&#xff0c;使用 Markdown 来编写并生成 PDF 文档将会是一个不错的体验&#xff0c;以下就介绍下如何使用 VS Code Markdown 来编写 PDF…

《看聊天记录都学不会C语言?太菜了吧》(6)编程很难吗?差一点就学不会了呢!

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖…

【ArcGIS风暴】气象台站气温(降水)矢量数据插值成栅格气温(降水)空间数据

关于文本格式的气象数据生成Shapefile矢量数据的过程,可以参照文章《ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层》。本文在前面生成的具有气温和降水属性的气象台站矢量数据的基础上,通过栅格插值,栅格裁剪等过程生成空间分布的气温和…

Android studio之导入新库提示Add library ‘Gradle*****@aar‘ to classpath

1 问题 as导入第三方库在依赖的基类build.gradle里面添加如下 implementation com.truizlop.sectionedrecyclerview:library:1.2.0 提示错误如下 2 原因 implementation 单层引用&#xff0c;只引用当前aar包层&#xff0c; api 多层引用&#xff0c;引用当前aar包层&#…

Windows 查看端口占用

查看 Windows 端口占用情况 在 Windows 命令行窗口下执行一下命令 查看所有端口占用情况netstat -ano 查看特定端口的占用情况netstat -aon|findstr "8080" 查看PID对应的进程tasklist|findstr "2212" 实例 博主碰到的是8080端口被占用了&#xff0c;如下图…

Android quot;QR二维码扫描quot;

支持灯 扫描结果 支持 抄、分享、浏览打开&#xff08;超链接&#xff09; 自己主动保存扫描记录 划删除 和源代码 git: http://git.oschina.net/892642257/QRCode csdn(0分): http://download.csdn.net/detail/onlyonecoder/7713589 版权声明&#xff1a;本文博主原创文章。博…

ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的&#xff0c;对于一个具体的ServiceDescriptor对象来说&#xff0c;如果它的ImplementationInstance和ImplementationFactory属性均为Null&#xff0c;那么ServiceProvider最终会利用其ImplementationT…

C# WPF布局控件LayoutControl介绍

Dev学习地址文档地址 &#xff1a;https://docs.devexpress.com/wpf&#xff1a;https://docs.devexpress.com/WPF/7875/wpf-controlswinform&#xff1a;https://docs.devexpress.com/WindowsForms/7874/winforms-controlsasp.NET: https://docs.devexpress.com/AspNet/7873/a…

《看聊天记录都学不会C语言?太菜了吧》(7)下一篇文章告诉你牛郎是谁

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖…

【遥感物候】30年物候始期空间分布特征(平均值)和变化趋势分析(Slope 一元线性回归分析)

问题分析:本文的数据为经过预处理和计算得到的30年(1983-2012年)物候参数始期遥感数据,共计30期影像,现在需要逐像元计算整个物候始期的空间分布特征(平均值)和变化趋势分析(Slope 一元线性回归分析)。最终的效果(左图为分布特征,右图为变化趋势): 一、方法原理 …

deb php7 fileinfo,linux安装php7.2扩展fileinfo

最简便的方法是使用pecl安装php的扩展&#xff0c;方便快捷&#xff0c;这里使用的是源码编译安装php扩展项目 中上传图片遇到的问题&#xff1a;明显是fileinfo不被支持&#xff0c;没有安装fileinfo。接下来开始安装因为我的linux服务器里比较干净&#xff0c;所以之前的php源…

使用keepalived实现双机热备

2019独角兽企业重金招聘Python工程师标准>>> 通常说的双机热备是指两台机器都在运行&#xff0c;但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候&#xff0c;另外一台会马上自动接管并且提供服务&#xff0c;而且切换的时间非常短。下面来以kee…