java、easyui-combotree树形下拉选择框
最近一直在研究这个树形的下拉选择框,感觉非常的有用,现在整理下来供大家使用:
首先数据库的表架构设计和三级菜单联动的表结构是一样,(父子关系)

1、下面我们用hibernate建一下对应的额实体类:
package com.hanqi.entity;
//地区 实体类
public class Region { //地区id
private String regionID; //地区名称
private String regionName; //上级id private String parentRegionID; public String getRegionID() {
return regionID;
} public void setRegionID(String regionID) {
this.regionID = regionID;
} public String getRegionName() {
return regionName;
} public void setRegionName(String regionName) {
this.regionName = regionName;
} public String getParentRegionID() {
return parentRegionID;
} public void setParentRegionID(String parentRegionID) {
this.parentRegionID = parentRegionID;
} @Override
public String toString() {
return "Region [regionID=" + regionID + ", regionName=" + regionName + ", parentRegionID=" + parentRegionID
+ "]";
} }
2、dao层查询数据的方法:
//获取数据列表
public List<Region> getlist(String parentid)
{
List<Region> rtn=new ArrayList<Region>();
init();
//查询数据
rtn=se.createQuery("from Region where parentRegionID=?").setString(, parentid).list(); destory();
return rtn;
}
3、建立service层的(在这里需要注意的是:返回的JSON格式的数据是一个嵌套的格式,这里就用到了递归的方法即根据父ID查询他的子ID然后再继续查询子ID下面的子ID。。。
返回的数据格式 必须包含 按照id:'',text:''children:['{}']的格式,所以我们先建一个这种格式的类。从数据库中取出数据后以这种类的格式返回
)
建一个tree需要的格式的类:
package com.hanqi.service;
import java.util.List;
public class TreeNode {
private String id;
private String text;
private List<TreeNode> children;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public List<TreeNode> getChildren() {
return children;
}
public TreeNode(String id, String text) {
super();
this.id = id;
this.text = text;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
}
public TreeNode() {
super();
}
}
service层里面的调用数据库层数据,采用递归方法循环遍历 子id,当不满足条件时,递归方法跳出,重点理解下面的getTreeNode()方法:
package com.hanqi.service; import java.util.ArrayList;
import java.util.List; import com.hanqi.dao.RegionDao;
import com.hanqi.entity.Region; public class RegionService { //
public List<Region> getList(String parentid)
{
return new RegionDao().getlist(parentid);
} //递归调用的方法
//获取子节点的集合
public List<TreeNode> getTreeNode(String id)
{
List<TreeNode> rtn =null;
List<Region> lr=getList(id);
if(lr!=null&&lr.size()>)
{
rtn=new ArrayList<>();
for(Region r:lr)
{
TreeNode tn=new TreeNode(r.getRegionID(), r.getRegionName()); System.out.println("name="+r.getRegionName());
//得到节点的子节点
//递归的调用
List<TreeNode>children= getTreeNode(r.getRegionID()); tn.setChildren(children); rtn.add(tn);
} } return rtn;
} }
servlet层调用service的数据,并把数据转换成JSON格式返回给前台:
package com.hanqi.web; import java.io.IOException;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson.JSONArray;
import com.hanqi.entity.H_Depart;
import com.hanqi.service.RegionService;
import com.hanqi.service.TreeNode; /**
* Servlet implementation class DepartServlet
*/
public class DepartServlet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public DepartServlet() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html"); RegionService rs=new RegionService(); List<TreeNode> lr =rs.getTreeNode(""); String json=JSONArray.toJSONString(lr);
System.out.println(json);
response.getWriter().print(json); } /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }
前段的显示层调用:
部门:
<input class="easyui-combotree" id="depart" name="depart"
data-options="{url:'DepartServlet'}" />
效果:

java、easyui-combotree树形下拉选择框的更多相关文章
- combobox级联检索下拉选择框
1.效果图 2.前端 @{ ViewBag.Title = "Index"; Layout = null; @*自动筛选下拉框*@ <script src="~/S ...
- 下拉选择框,PopupWindow的使用
实现下拉选择框 直接上代码 Activity.java package com.example.shaofei.customerviewdemo1; import android.os.Bundle; ...
- FancySelect – 更好用的 jQuery 下拉选择框插件
FancySelect 这款插件是 Web 开发中下拉框功能的一个更好的选择.FancySelect 使用方便,只要绑定页面上的任何 Select 元素,并调用就 .fancySelect() 就可以 ...
- HTML、CSS小知识--兼容IE的下拉选择框select
HTML <div class="s_h_ie"> <select id="Select1" disabled="disabled& ...
- Bootstrap系列 -- 15. 下拉选择框select
Bootstrap框架中的下拉选择框使用和原始的一致,多行选择设置multiple属性的值为multiple.Bootstrap框架会为这些元素提供统一的样式风格 <form role=&quo ...
- CSS自定义select下拉选择框(不用其他标签模拟)
今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方 ...
- 基于jQuery美化联动下拉选择框
今天给大家介绍一款基于jQuery美化联动下拉选择框.这款下下拉选择框js里自带了全国所有城市的数数库.下拉选择框适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲 ...
- ul+jquery自定义下拉选择框
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- 背水一战 Windows 10 (105) - 通知(Toast): 带按钮的 toast, 带输入的 toast(文本输入框,下拉选择框)
[源码下载] 背水一战 Windows 10 (105) - 通知(Toast): 带按钮的 toast, 带输入的 toast(文本输入框,下拉选择框) 作者:webabcd 介绍背水一战 Wind ...
随机推荐
- ABP(现代ASP.NET样板开发框架)系列之23、ABP展现层——异常处理
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之23.ABP展现层——异常处理 ABP是“ASP.NET Boilerplate Project (ASP.NET ...
- 创建DbContext
返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 上一篇介绍了<创建实体>,这一篇我们顺其自然地介绍<创建DbContext>. 温故: 提到DbConte ...
- (实例篇)PHP实现HTTP断点续传的方法
PHP实现HTTP断点续传的方法. <?php /** * PHP-HTTP断点续传实现 * @param string $path: 文件所在路径 * @param string $file: ...
- 【Win10 应用开发】使用“实时可视化树”工具查看应用界面元素
记得有朋友问老周,系统中的“计算器”应用的界面菜单是怎么做的.其实,你可以用VS 2015的新工具来查看它的界面结构. 实时可视化树工具只能查看XAML定义的界面,如WPF和Win App.现在,Wi ...
- 基本数据结构(1)——算法导论(11)
1. 引言 从这篇博客开始,来介绍一些基本的数据结构知识.本篇及下一篇会介绍几种基本的数据结构:栈.队列.链表和有根树.此外还会介绍由数组构造对象和指针的方法. 这一篇主要介绍栈和队列 ...
- APNS 远程推送通知 PUSH deviceToken
服务器向客户端推送消息: 当应用程序推到后台,或者根本就没有运行(我们的代码无能为力) 如果这种情况之下,应用程序想和用户交互(传统的做法 不可能) 推送 APNS:Ap ...
- C#开发微信门户及应用(7)-微信多客服功能及开发集成
最近一直在弄微信的集成功能开发,发现微信给认证账户开通了一个多客服的功能,对于客户的咨询,可以切换至客服处理的方式,而且可以添加多个客服进行处理,这个在客户咨询比较多的时候,是一个不错的营销功能.微信 ...
- python 数据类型 ---字符串
1. 字符串去除空白 ,strip() , 包括空格,tab键, 换行符 >>> name = " Frank " >>> name.strip ...
- golang bytes.Buffer Reset
func t() { a := []'} buf := new(bytes.Buffer) buf.Write(a) b := buf.Bytes() fmt.Println(b) buf.Reset ...
- mysql主从之slave-skip-errors和sql_slave_skip_counter
一般来说,为了保险起见,在主从库维护中,有时候需要跳过某个无法执行的命令,需要在slave处于stop状态下,执行 set global sql_slave_skip_counter=1以跳过命令.但 ...