树拼接--【DRP】

	/**
	 * 子叶节点前面加入一个-号,非叶子节点前面加入一个+号
	 * @param conn
	 * @param id
	 * @param level
	 * @throws SQLException
	 */
	private void readClientTree(Connection conn,int id,int level)throws SQLException{
		String sql="select * from t_client where pid=?";
		PreparedStatement pstmt=null;
		ResultSet rs=null;

		try {
			pstmt=conn.prepareStatement(sql);
			pstmt.setInt(1, id);
			rs =pstmt.executeQuery();

			while (rs.next()) {
				sbTreeHTML.append("<div>");//div开始
				sbTreeHTML.append("\n");
				for(int i=0;i<level;i++){
					sbTreeHTML.append("<img src=\"../images/white.gif\">");
					sbTreeHTML.append("\n");
				}

			/*	sbTreeHTML.append(rs.getString("name"))
				.append("<br> \n");*/
				//如果遍历的节点是叶子节点,+名字+回车,如果不是遍历的叶子节点,-名字回车
				//if("N".equals(rs.getString("is_leaf"))){
				if(Constants.NO.equals(rs.getString("is_leaf"))){
					sbTreeHTML.append("<img alt=\"展开\" style=\"cursor:hand;\" onClick=\"display(‘"+ rs.getInt("id") + "‘);\" id=\"img" +rs.getInt("id")+"\" src=\"../images/plus.gif\">");
					sbTreeHTML.append("\n");
					sbTreeHTML.append("<img id=\"im"+ rs.getInt("id") +"\" src=\"../images/closedfold.gif\">");
					sbTreeHTML.append("\n");
					sbTreeHTML.append("<a href=\"client_node_crud.jsp\" target=\"clientDispAreaFrame\">"+rs.getString("name")+"</a>");
					sbTreeHTML.append("\n");
					sbTreeHTML.append("<div style=\"display:none;\" id=\"div" + rs.getInt("id")+"\">");
					sbTreeHTML.append("\n");
					readClientTree(conn, rs.getInt("id"), level+1);
					sbTreeHTML.append("</div>");
					sbTreeHTML.append("\n");
				}else{
					sbTreeHTML.append("<img src=\"../images/minus.gif\">");
					sbTreeHTML.append("\n");
					sbTreeHTML.append("<img src=\"../images/openfold.gif\">");
					sbTreeHTML.append("\n");

					if(Constants.YES.equals(rs.getString("is_client"))){
						sbTreeHTML.append("<a href=\"client_crud.html\" target=\"clientDispAreaFrame\">" +rs.getString("name") + "</a>");
					}else{
						sbTreeHTML.append("<a href=\"client_node_crud.jsp\" target=\"clientDispAreaFrame\">"+rs.getString("name")+"</a>");
					}
					sbTreeHTML.append("\n");
				}
				sbTreeHTML.append("</div>");//div结束
				sbTreeHTML.append("\n");
			}
		}finally {
			DbUtil.close(rs);
			DbUtil.close(pstmt);
		}
	}

静态类:

/**
 *
 */
package com.bjpowernode.drp.util;

/**
 * @ClassName:Constants
 * @Description:系统公用常量
 * @author wm
 * @date 2016年1月1日下午4:14:41
 */
public class Constants {

		public static final String NO="N";
		public static final String YES="Y";

}

jsp页面:

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
 <%@page import="com.bjpowernode.drp.basedata.manager.*" %>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
		<link rel="stylesheet" href="../style/drp.css">
		<style type="text/css">
<!--
a:link {
	text-decoration: none;
	color: #000000;
	font-size: 9pt;
	font-family: 宋体;
}
a:visited {
	text-decoration: none;
	color: #000000;
	font-size: 9pt;
	font-family: 宋体;

}
a:hover {
	text-decoration: none;
	color: #000000;
	font-size: 9pt;
	font-family: 宋体;

}
a:active {
	text-decoration: none;
	color: #000000;
	font-size: 9pt;
	font-family: 宋体;
}
-->
</style>

<script language="JavaScript">
<!--
function display(id) {
	 eval("var div=div"+id);
	 eval("var img=img"+id);
	 eval("var im=im"+id);
	 div.style.display=div.style.display=="block"?"none":"block";
	 img.src=div.style.display=="block"?"../images/minus.gif":"../images/plus.gif";
	 im.src=div.style.display=="block"?"../images/openfold.gif":"../images/closedfold.gif";
	 img.alt=div.style.display=="block"?"关闭":"展开";
}
//-->
</script>
	</head>
	<body class="body1">
		<table>
			<tr>
				<td valign="top" nowrap="nowrap">
					<%=ClientManager.getInstance().ClientManager() %>
				</td>
			</tr>
		</table>
	</body>
</html>

<%= %>获取页面上变量的值

调用的类:

/**
 *
 */
package com.bjpowernode.drp.basedata.manager;

import com.bjpowernode.drp.basedata.domain.Client;

/**
 * @ClassName:ClientManager
 * @Description:采用单例实现
 * @author wm
 * @date
 */
public class ClientManager {

	 //静态类
	 private static ClientManager instance=new ClientManager();
	 //私有构造函数
	 private ClientManager(){

	 }
	 //静态方法
	 public  static ClientManager getInstance() {
		 return instance;
	}
	/**
	 *
	 */
	@SuppressWarnings(value = "all")
	public String ClientManager() {
		return new ClientTreeReader().getClientTreeHTMLString();
	}
	/**
	 * 根据id查询分销商和区域
	 * @param id
	 * @return 如果存在返回client对象,否则返回null
	 */
	public Client findClientOrRegionById(int id){
		return null;
	}

}

页面树结构,虽然不能支持增删改的同步,但是能实现不同的节点不一样的显示。img1 im1 div1 ,如果是父节点,显示+号,名字,回车;如果不是遍历的叶子节点,-号 ,名字,回车。

时间: 2024-10-11 05:04:13

树拼接--【DRP】的相关文章

关于Expression表达式树的拼接

最近在做项目中遇到一个问题,需求是这样的: 我要对已经存在的用户进行检索,可以根据用户的id 或者用户名其中的一部分字符来检索出来,这样就出现了三种情况 只有id,只有用户名中一部字符,或者全部都有. 我们用的MVC+EF5.0的框架,在BLL层进行查询的 时候需要构建lambda表达式来作为查询条件,但是,我们怎么来构建lambda来确定查询的条件呢?我们知道Express<Func<T,bool>>这样的一个参数可以是lambda表达式,但是这里的按条件拼接式不能使用委托链的形

Linux Kernel - Debug Guide (Linux内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环

poj1988 Cube Stacking

并查集的高效之处在于路径压缩和延迟更新. 在本题中需要额外维护子树的规模以及当前子树节点到跟的距离两个数组. 由于一个新的数必然是两棵树拼接而成,对于子树规模的更新直接相加即可, 对于节点到跟的距离: 我们让a树的根指向b树的根,同时更新a树根到(a+b)树根(即b树根)的距离为size_of(Tree(b))即可完成维护. http://poj.org/problem?id=1988 1 #include <cstdio> 2 #include <cstring> 3 #incl

linux内核调试指南

linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环境的建立 gdb基础 基本命令 gdb之gui gdb技巧 gdb宏 汇编基础--X86篇 用户手册 AT&

sass和postcss

sass是css预处理器 需要安装node-sass支持 核心是c++编写 集成 sass-loader 把scss装换成css css-loader 找出@import和url()导入的语法,告诉webpack依赖的资源.同时支持css modules.压缩css等 style-loader 把css转换成字符串,注入到javascript里.单独提出ExtractTextPlugin PostCSS是更纯粹地对css本身做转换,在css之后来处理,利用插件类似gulp里的task PostC

2019.10.30 队测(晚上)

T1: 题目链接:Click here Solution: 考虑把给定的地图建出图来,那么询问实际上就是询问图上两点所有路径中最大边权的最小值 询问是一个老问题了,把边按权升序排列,用kruskal重构树,答案即为树上两点lca的点权 考虑如何建图,我们用一个bfs来建图即可,每次扩展到一个被其他城市扩展过的点,就加入一条边 因为不知道有多少条边,我们用vector来存边,注意判断两点是否在一个连通块内,注意路径压缩(不能直接用fa[x]啊) Code: #include<bits/stdc++

【DRP】删除递归树的操作

正如图呈现的树结构.本文从任意节点删除树形结构.提供解决方案 图中,不包括其他结点的是叶子结点.包括其他结点的是父结点,即不是叶子结点. 一 本文的知识点: (1)递归调用: 由于待删除的结点的层次是不确定的,假设是叶子结点则能够直接获取id直接删除,如:北京中医医院.华北区.假设待删除的结点是父结点,则须要继续向下查询,依次遍历出其子结点,从下往上依次删除,如'华北区'.因此我们使用递归调用. (2)保证事务的原子性 如果待删除的结点是'华北区'.则相当于删除了3条信息(华北区.北京市.北京中

表达式树动态拼接lambda

动态拼接lambda表达式树 前言 最近在优化同事写的代码(我们的框架用的是dapperLambda),其中有一个这样很普通的场景——界面上提供了一些查询条件框供用户来进行过滤数据.由于dapperLambda按条件查询时是传入表达式树的参数,这样比如其中查询条件有一个是审核状态,另外五个是模糊查询,那这查询时的表达式树参数就要写两次,这样使得代码看起来有很多是重复的,而且如果查询条件多的情况下,在写那表达式树参数时也容易漏写或错写.所以我在想如果可以动态拼接这表达式树,那这代码就要精简很多了.

算法初级面试题07——前缀树应用、介绍和证明贪心策略、拼接字符串得到最低字典序、切金条问题、项目收益最大化问题、随时取中位数、宣讲会安排

第六课主要介绍图,不经常考,故今天先讲第七课的内容,介绍比较常考的树和贪心算法 介绍前缀树 何为前缀树? 如何生成前缀树? 可以查有多少个字符串以"be"为前缀. 如果要判断有没有"be"这个节点,每个节点上加上一个数据项,有多少个字符串以当前节点结尾的(可以查加了多少次特定字符串). 给一个字符串.返回多少个字符串以这个为前缀. 再加一个数据项,记录该节点被划过多少次. 大概实现: 删除逻辑: 根据path是否变为0,来判断是否继续往下删. 可以解决以下问题: 一