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'}"

/>

效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM