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(0, 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()>0)
            {
                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("0");
        
            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'}"

/>

效果:

 

转载于:https://www.cnblogs.com/diaozhaojian/p/6204387.html

easyui-combotree是一种基于EasyUI架的组件,用于在网页中创建一个带有树状结构的下拉菜单。它可以用于选择树状结构中的某个节点。通过设置相关参数,可以实现默认选中多项、选择节点以及获取节点信息等功能。你可以使用HTML代码来创建一个easyui-combotree,如下所示: ``` <input id="ProjectTree" class="easyui-combotree" style="width: 300px;" /> ``` 在后端代码中,你可以通过获取区域节点信息的方式来提供easyui-combotree所需的数据。例如,在后端代码中可以使用以下方法来获取三级区域菜单的数据: ```csharp public ActionResult GetThreeRegionTree(string parentRegionCode = "") { List<TreeRegionOne> treeOneList = new List<TreeRegionOne>(); var treeListModel = Sys_RegionServer.GetRegionChildList(parentRegionCode); foreach (var oneTreeItem in treeListModel) { TreeRegionOne treeOne = new TreeRegionOne(); treeOne.id = Convert.ToInt32(oneTreeItem.Value);//下拉value值 treeOne.text = oneTreeItem.Text;//显示文本 treeOne.state = "open";//显示的是文件夹样式还是文档样式,也就是是否最后一级 //是否有子节点 var childList = Sys_RegionServer.GetRegionChildList(oneTreeItem.Value); if (childList != null && childList.Count() > 0) { treeOne.state = "closed"; } treeOneList.Add(treeOne); } return Json(treeOneList); } ``` 上述代码中,通过遍历区域节点信息,构建一个TreeRegionOne对象列表,包含了节点的id、显示文本和是否有子节点等信息。最后,通过Json方法返回这个列表作为easyui-combotree的数据源。这样,easyui-combotree就会显示出相应的树结构,并且可以根据你的需求进行选择和操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [easyui combotree树形下拉)使用收获总结](https://blog.csdn.net/weixin_44311648/article/details/118654862)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [easyui学习记录:combotree的使用](https://blog.csdn.net/weixin_30319153/article/details/97892869)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值