java下拉树_java、easyui-combotree树形下拉选择框

最近一直在研究这个树形的下拉选择框,感觉非常的有用,现在整理下来供大家使用:

首先数据库的表架构设计和三级菜单联动的表结构是一样,(父子关系)

4ac848ea46bec9592999fe0da278f78c.png

1、下面我们用hibernate建一下对应的额实体类:

package com.hanqi.entity;//地区 实体类

public classRegion {//地区id

privateString regionID;//地区名称

privateString regionName;//上级id

privateString parentRegionID;publicString getRegionID() {returnregionID;

}public voidsetRegionID(String regionID) {this.regionID =regionID;

}publicString getRegionName() {returnregionName;

}public voidsetRegionName(String regionName) {this.regionName =regionName;

}publicString getParentRegionID() {returnparentRegionID;

}public voidsetParentRegionID(String parentRegionID) {this.parentRegionID =parentRegionID;

}

@OverridepublicString toString() {return "Region [regionID=" + regionID + ", regionName=" + regionName + ", parentRegionID=" +parentRegionID+ "]";

}

}

2、dao层查询数据的方法:

//获取数据列表

public Listgetlist(String parentid)

{

List rtn=new ArrayList();

init();//查询数据

rtn=se.createQuery("from Region where parentRegionID=?").setString(0, parentid).list();

destory();returnrtn;

}

3、建立service层的(在这里需要注意的是:返回的JSON格式的数据是一个嵌套的格式,这里就用到了递归的方法即根据父ID查询他的子ID然后再继续查询子ID下面的子ID。。。

返回的数据格式 必须包含 按照id:'',text:''children:['{}']的格式,所以我们先建一个这种格式的类。从数据库中取出数据后以这种类的格式返回

)

建一个tree需要的格式的类:

package com.hanqi.service;

import java.util.List;public classTreeNode {privateString id;privateString text;private Listchildren;publicString getId() {returnid;

}public voidsetId(String id) {this.id =id;

}publicString getText() {returntext;

}public voidsetText(String text) {this.text =text;

}public ListgetChildren() {returnchildren;

}publicTreeNode(String id, String text) {

super();this.id =id;this.text =text;

}public void setChildren(Listchildren) {this.children =children;

}publicTreeNode() {

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 classRegionService {// public ListgetList(String parentid)

{return newRegionDao().getlist(parentid);

}//递归调用的方法//获取子节点的集合

public ListgetTreeNode(String id)

{

List rtn =null;

List lr=getList(id);if(lr!=null&&lr.size()>0)

{

rtn=new ArrayList<>();for(Region r:lr)

{

TreeNode tn=newTreeNode(r.getRegionID(), r.getRegionName());

System.out.println("name="+r.getRegionName());//得到节点的子节点//递归的调用

Listchildren=getTreeNode(r.getRegionID());

tn.setChildren(children);

rtn.add(tn);

}

}returnrtn;

}

}

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 classDepartServlet extends HttpServlet {private static final long serialVersionUID = 1L;/**

* @see HttpServlet#HttpServlet()*/

publicDepartServlet() {

super();//TODO Auto-generated constructor stub

}/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/

protected voiddoGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

response.setCharacterEncoding("UTF-8");

response.setContentType("text/html");

RegionService rs=newRegionService();

List lr =rs.getTreeNode("0");

String json=JSONArray.toJSONString(lr);

System.out.println(json);

response.getWriter().print(json);

}/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/

protected voiddoPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//TODO Auto-generated method stub

doGet(request, response);

}

}

前段的显示层调用:

部门:

/>

效果:

14cf6df2486a105946f032388bc21ea2.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值