java web实现easyui树(第一版本)

java代码:

package cmxui.pub.easyui;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.cmx.db.cmxDatabase;
import com.cmx.tools.CmxTools;

/**
 * 1、从表中取出树的内容。2、形成树的JSON串
 * 形成首页的统计图用到,统计出每个分类对应的树结点,通过树查找出相应的内容,通过去重等,得到四个值
 * @author Administrator
 *
 */
public class cmxTree extends CmxTreePub{
    private String projName = "";
    private String sql = "";
    private String fields = "";

    /**
     * 构造函数
     * @param sql 运行查询的SQL语句
     * @param fields  形成Map的Key定义
     */
    public cmxTree(String projName, String sql, String fields) {
        this.projName = projName;
        this.sql = sql;
        this.fields = fields;
    }

    /**
     * 将内容形成JSON  树的数据,List套List,通过fields形成MAP,构建三个MAP
     * @author fanjw 2017年1月30日
     * @return  返回easyui对应的树数据
     */
    public List<Object> getTreeJson(){      // id, pid, text, iconCls, checked, state, attributes, target   // select id,ClassID (结点),Parents(父结点),PreferredLabel(文本) from fenleishu
        List<List<Object>> llo = cmxDatabase.getData(projName, sql);
        List<Map<String, String>> lm = CmxTools.convertFieldMap(llo, fields);
        Map<String, String> map_id_pid = new HashMap<String,String>();  // key为ID, Value为Pid
        Map<String, Map<String, String>> map_id_attrMap = new HashMap<String,Map<String, String>>();  //复杂Map key为ID, Value为 id:text:pid
        Map<String, List<String>> map_pid_ids = new HashMap<String,List<String>>();  // key为Pid,value为[id,id,id,id]
        // 以下功能为构建几个MAP,用于生成树
        for(int i=0; i<llo.size(); i++){
            String myId = lm.get(i).get("id").toString();
            String myPid = lm.get(i).get("pid").toString();
            map_id_pid.put(myId, myPid);
            map_id_attrMap.put(myId, lm.get(i));
            CmxTools.addValueList(map_pid_ids, myPid, myId);        // 添加新的ID   
        }       
        List<String> roots = getRootKeyLst(map_id_pid);  // 找出多根
        System.out.println("roots=" + roots);
        List<Object> lo = new ArrayList<Object>();
        for(String root : roots){
            Map<String, Object> omap = getChild(map_pid_ids, map_id_attrMap, root, 0);
            lo.add(omap);
        }
        return(lo);
    }

    /**
     * 以下功能为找出根结点, 多个根返回List 父结点 与 子 结点相同,则设置父结点为空,表示此子结点为根结点
     * @author fanjw 2017年1月30日
     * @param map_id_pid
     * @return
     */
    private List<String> getRootKeyLst(Map<String, String> map_id_pid) {
        List<String> ls = new ArrayList<String>();
        for(String key : map_id_pid.keySet()){
            String value = map_id_pid.get(key);
            if(value.equals(key) || value.trim().length()==0) ls.add(key);  // 如果父结点与子结点相等,或者父结点为空,则此结点为根
            if(!map_id_pid.containsKey(value)) ls.add(key);   // 如果父结点不在结点表中,即此父结点没有自己的上一级结点了,则为根
        }
        return ls;
    }

    /**
     * @param map_pid_ids key为Pid,value为[id,id,id,id]
     * @param map_id_obj  复杂Map key为ID, Value为 map, 即 此结点对应的属性{id:1, text:2}
     * @param rootid
     * @param index
     * @param comboboxMap
     * @return
     */
    private Map<String, Object> getChild(Map<String, List<String>> map_pid_ids, Map<String, Map<String, String>> map_id_obj,  String rootid, int index){
        index++;
        Map<String, Object> omap = new HashMap<String, Object>();
        if(map_id_obj.containsKey(rootid)) omap.putAll(map_id_obj.get(rootid));
        if(map_pid_ids.containsKey(rootid) && index<4){  // 结点有孩子
            List<Object> lo = new ArrayList<Object>();
            for(String id : map_pid_ids.get(rootid)){
                lo.add(getChild(map_pid_ids, map_id_obj, id, index));
            }
            omap.put("children", lo);
        }
        return(omap);
    }

    /**
     * 
     * @author fanjw 2017年1月29日
     * @param args
     */
    public static void main(String[] args) {
        cmxTree tj = new cmxTree("cmxniaodb", "select id,ClassID,Parents,PreferredLabel from fenleishu", "noname,id,pid,text");
        List<Object> gt = tj.getTreeJson();
        System.out.println("gt=" + gt);
    }

    /* (non-Javadoc)
     * @see cmxui.pub.easyui.CmxInterfaceUi#setData()
     */
    @Override
    public void setData() {
        // TODO Auto-generated method stub

    }

    /* (non-Javadoc)
     * @see cmxui.pub.easyui.CmxInterfaceUi#getJsonStr()
     */
    @Override
    public void getJsonStr() {
        // TODO Auto-generated method stub

    }
}

拦截器代码:

package cmxui.controller.tree;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import net.sf.json.JSONArray;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import cmxui.pub.easyui.cmxTree;

import com.cmx.tools.CmxTools;
import com.cmx05.pagepub.CmxPagePub;
/**
 * 树测试用
 * 2017.01.28
 */
@Controller
@RequestMapping("/web")
public class TreeController {
    @RequestMapping(value = "/tree", method = { RequestMethod.GET,
            RequestMethod.POST })
    public String cmxtree(Model model, HttpServletRequest request) {
        cmxTree ct = new cmxTree("cmxniaodb", "select id,ClassID,Parents,PreferredLabel from fenleishu", "noname,id,pid,text");
        List<Object> lmap = ct.getTreeJson();
        JSONArray lmjson = JSONArray.fromObject(lmap);
        model.addAttribute("CmxTree", CmxTools.getJsonForJS(lmjson+""));        // 去除JSON内容中的单引号
        request.getSession().setAttribute("basepath", CmxPagePub.getBasePath(request));
        model.addAttribute("basepath", CmxPagePub.getBasePath(request));
        String  rStr = "/treetest/indextree";
        return rStr;
    }
}

JSP前端代码:

<%@ page import="java.sql.Timestamp"%>
<%@ page language="java" import="java.util.*" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" import="java.text.SimpleDateFormat"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<!doctype html>
<html lang="utf-8">
 <head>
    <meta charset="utf-8">
    <jsp:include page="/page/treetest/cmx00_head0.jsp"/>
    <script type="text/javascript">
        var treedata = eval("(" + '${CmxTree}' + ")");  
        console.log(treedata);
    </script>
 </head>

 <body> 
    <div style="margin:0px;"> 
            <ul id="cmxLeftTree" style='border:2px solid blue;height:980px;width:600px;'></ul>
    </div>
    <script type="text/javascript">
        var dd = treedata;
        console.log(dd);
        $('#cmxLeftTree').tree({
            data:dd,
            animate:true,
            lines:true,
            dnd:true,
            method:'get'
        }); 
    </script>
</body> 
</html>


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值