SpringMVC+mybatis 实现easyui中tree

  最近做项目用到了前端框架easyUI,以下是easyUI tree 的前后台实现。

  1.前端页面使用easyui的tree
  <ul id="tree"></ul>

  $("#tree").tree({
     url:'orgManage.do',
   }
  });
 
  2.创建TreeJson的dto

  import java.io.Serializable;
  import java.util.ArrayList;
  import java.util.List;
  import net.sf.json.JSONObject;
/**
* easui中的tree_data.json数据,只能有一个root节点
* [{  
    "id":1,  
    "text":"Folder1",  
    "iconCls":"icon-save",  
    "children":[{  
        "text":"File1",  
        "checked":true 
    }]  
}]
* 提供静态方法formatTree(List<TreeJson> list) 返回结果
* TreeJson.formatTree(treeJsonlist) ;
*/
public class TreeJson implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;

    private String id ;
    private String pid ;
    private String text ;
    private String iconCls ;
    private String state ;
    private String checked ;
    private JSONObject attributes = new JSONObject() ;
    private List<TreeJson> children = new ArrayList<TreeJson>() ;
   

public static List<TreeJson> formatTree(List<TreeJson> list) {

        TreeJson root = new TreeJson();
        TreeJson node = new TreeJson();
        List<TreeJson> treelist = new ArrayList<TreeJson>();// 拼凑好的json格式的数据
        List<TreeJson> parentnodes = new ArrayList<TreeJson>();// parentnodes存放所有的父节点
       
        if (list != null && list.size() > 0) {
            root = list.get(0) ;
            //循环遍历oracle树查询的所有节点
            for (int i = 1; i < list.size(); i++) {
                node = list.get(i);
                if(node.getPid().equals(root.getId())){
                    //为tree root 增加子节点
                    parentnodes.add(node) ;
                    root.getChildren().add(node) ;
                }else{//获取root子节点的孩子节点
                    getChildrenNodes(parentnodes, node);
                    parentnodes.add(node) ;
                }
            }   
        }
        treelist.add(root) ;
        return treelist ;

    }

    private static void getChildrenNodes(List<TreeJson> parentnodes, TreeJson node) {
        //循环遍历所有父节点和node进行匹配,确定父子关系
        for (int i = parentnodes.size() - 1; i >= 0; i--) {
           
            TreeJson pnode = parentnodes.get(i);
            //如果是父子关系,为父节点增加子节点,退出for循环
            if (pnode.getId().equals(node.getPid())) {
                pnode.setState("closed") ;//关闭二级树
                pnode.getChildren().add(node) ;
                return ;
            } else {
                //如果不是父子关系,删除父节点栈里当前的节点,
                //继续此次循环,直到确定父子关系或不存在退出for循环
                parentnodes.remove(i) ;
            }
        }
    }
}

3.mapper.xml配置
  <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.lafecat.dao.OrgMapper">
<resultMap id="orgMap" type="com.lafecat.model.TreeJson" >
    <id column="Organization_ID" property="id" jdbcType="VARCHAR" />
    <result column="OrganizationName" property="text" jdbcType="VARCHAR" />
    <result column="ParentID" property="pid" jdbcType="VARCHAR" />
  </resultMap>
    <!--获取所有组织机构信息-->
   <select id="getOrgInfo"  resultMap="orgMap"> 
    SELECT t.`Organization_ID`,t.`OrganizationName`,t.`ParentID`  FROM TE_Organization t
   </select>
</mapper>

4.ServiceImpl实现
  public List<TreeJson> getOrgInfo() {
List<TreeJson> treeList =orgMapper.getOrgInfo();
treeList = TreeJson.formatTree(treeList);
return treeList;
}
  
  5.Controller层实现
  public void listOrgs(HttpServletResponse res){
List<TreeJson> list = orgService.getOrgInfo();
                String jsonString= JSONArray.fromObject(list).toString();
res.setHeader("Pragma", "No-cache");
res.setHeader("Cache-Control", "no-cache");
res.setCharacterEncoding("UTF-8");
res.getWriter().print(jsonString);
res.getWriter().flush();
res.getWriter().close();
}

猜你喜欢

转载自lafecat.iteye.com/blog/2217949