zTree-zTree Tree的 基础使用

6 篇文章 0 订阅
1 篇文章 0 订阅

配置

   
   
  1. <link rel="stylesheet" href="js/ztree/css/zTreeStyle/zTreeStyle.css" type="text/css">
  2. <script src="js/jquery-1.8.3.js"></script>
  3. <script src="js/ztree/jquery.ztree.all-3.5.js"></script>
关于手册:
主要在配置中,也就是set中设置要触发的事件及相关配置,在 callback在声明事件,这些事件的参数已经固定,只需自己实现相应的功能就好。

简单的树:

效果:
 
 
代码:
    
    
  1. <script type="text/javascript">
  2. var zNodes =[ //根据单表的域名关系 open:true 展开 isParent:true作为父节点
  3. {id:0,addrname:'中国',pid:-1,open:true},
  4. {id:1,addrname:'陕西省',pid:0},
  5. {id:2,addrname:'甘肃省',pid:0},
  6. {id:3,addrname:'西安市',pid:1},
  7. {id:4,addrname:'兰州市',pid:2,isParent:true},
  8. {id:5,addrname:'高新区',pid:3},
  9. {id:6,addrname:'雁塔区',pid:3}
  10. ];
  11. var setting = {
  12. data: {
  13. simpleData: { //更改zNodes关键字三个主要的依次为:idKey, name,pIdKey
  14. enable: true,
  15. idKey:"id",
  16. pIdKey:"pid"
  17. },
  18. key:{
  19. name:"addrname"
  20. }
  21. }
  22. }
  23. $(document).ready(function(){
  24. $.fn.zTree.init($("#areaTree"), setting, zNodes); //设置初始化
  25. });
  26. </script>
  27. <ul id="areaTree" class="ztree"></ul> 必须放在ul标签中

服务器端获取数据并加载

通过request域获取数据

前提是有一个按钮之类发生事件访问到servlet中,在返回到jsp页面展现tree
     
     
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <link rel="stylesheet" href="js/ztree/css/zTreeStyle/zTreeStyle.css" type="text/css">
  3. <script src="js/ztree/jquery.ztree.all-3.5.js"></script>
  4. <div>
  5. <ul id="areaTree" class="ztree"></ul> //tree必须放在ul中
  6. </div>
  7. <script type="text/javascript">
  8. var setting = {
  9. check:{
  10. enable: true,
  11. chkStyle: "checkbox"
  12. },
  13. data: {
  14. simpleData: {
  15. enable: true,
  16. idKey:"id", //idKey、pIdKey、 name 必须设置为模型中的字段
  17. pIdKey:"pid"
  18. },
  19. key:{
  20. name:"rname"
  21. }
  22. }
  23. }
  24. var zNodes =${requestScope.addrList} //从requestScop中获取数据,在servlet中将数据放在request域中
  25. zNodes.unshift( {id:0,addrname:'中国',pid:-1,open:true}); //为tree添加一个根节点 unshift()表示添加数组在数组的第一个位置
  26. $(document).ready(function(){
  27. $.fn.zTree.init($("#areaTree"), setting, zNodes); //tree的初始化
  28. });
  29. </script>
servlet代码:
     
     
  1. public void addrssList(HttpServletRequest req, HttpServletResponse resp)
  2. throws ServletException, IOException {
  3. List addrList = this.addrDao.selectAddressList(); //从数据库中查到信息
  4. String addrJsonStr = JsonUtil.transToJsonStr(addrList); //将数据转化成json格式的字符串
  5. System.out.println("addrJsonStr=="+addrJsonStr);
  6. req.setAttribute("addrList",addrJsonStr); //将字符串放入Request
  7. req.getRequestDispatcher("manage/address/addrList.jsp").forward(req, resp); //跳转到jsp页面
  8. }


通过异步的方式一次加载

1、创建子节点的模型类
   
   
  1. public class region {
  2. private int id; //子节点
  3. private String rname; //子节点名称
  4. private int pid; //父节点
  5. private boolean isparent; //是否为父节点
  6. private boolean isopen; //默认是否展开
  7. //无参狗造
  8. //成员变量的set方法和get方法
  9. }

2、在servlet中获取到数据库的数据写入流中。
在servlet进行数据操作,查到所有节点数据
   
   
  1. protected void getList(HttpServletRequest req, HttpServletResponse resp)
  2. throws ServletException, IOException {
  3. RegionDao rd = new RegionDaoimpl();
  4. List<region> relist =rd.getallRegion(); //获取到所有节点的信息
  5. String jsonStr = JsonUtil.transToJsonStr(relist); //装换成json格式并写入流中 jsonStr为json格式的字符串
  6. JsonUtil.outJsonStrAndColse(resp, jsonStr);
  7. }

3、jsp页面获取到节点数据并初始化tree
   
   
  1. var setting = {
  2. data: {
  3. simpleData: {
  4. enable: true, //使用简单数据模式
  5. idKey: "id", //id pid 以及key中的name表示节点名称的要与模型中定义的相符合
  6. pIdKey: "pid",
  7. rootPId: 0,
  8. },
  9. key: {
  10. name: "rname"
  11. }
  12. },
  13. async: { //加载
  14. enable: true, //开启异步加载
  15. url:"ZtreeServlet.do" //服务器路径
  16. },
  17. callback : {
  18. onAsyncSuccess : onAsyncSuccess, //异步访问成功后获取到数据执行该方法
  19. }
  20. }
  21. var zTree;
  22. function onAsyncSuccess (event, treeId, treeNode, msg){
  23. zTree = $.fn.zTree.getZTreeObj(treeId); //获取节点数据
  24. var nodes = zTree.getNodes();
  25. }
  26. $(document).ready(function(){
  27. $.fn.zTree.init($("#areaTree"), setting, zTree); //初始化tree ,areaTree为放置该tree的容器id
  28. });
容器:
   
   
  1. <ul id="areaTree" class="ztree"></ul> //tree必须放在ul中

通过异步的方式批量加载

原理:每个节点都有 id name pid 
 每个节点的pid都是搞节点的父节点的id
这样点击节点,获取节点的id,再将这个id的值作为pid的条件查询,如果有数据,证明是父节点,如果没有数据返回,证明是子节点
根据是不是父节点来给isParent设置true还是false
数据库表
 
1、创建子节点的模型类
    
    
  1. package com.cpf.pojo;
  2. public class region {
  3. private int id;
  4. private String rname;
  5. private int pid;
  6. private String isParent; //是否为父节点
  7. private boolean isopen; //是否展开
  8. private int subCount; //该节点拥有子节点的数量
  9. public region() {
  10. super();
  11. }
  12. public region(int id, String rname, int pid) {
  13. super();
  14. this.id = id;
  15. this.rname = rname;
  16. this.pid = pid;
  17. }
  18. public int getId() {
  19. return id;
  20. }
  21. public void setId(int id) {
  22. this.id = id;
  23. }
  24. public String getRname() {
  25. return rname;
  26. }
  27. public void setRname(String rname) {
  28. this.rname = rname;
  29. }
  30. public int getPid() {
  31. return pid;
  32. }
  33. public void setPid(int pid) {
  34. this.pid = pid;
  35. }
  36. public String getIsParent() {
  37. return isParent;
  38. }
  39. public void setIsParent(String isParent) {
  40. this.isParent = isParent;
  41. }
  42. public int getSubCount() {
  43. return subCount;
  44. }
  45. public void setSubCount(int subCount) {
  46. this.subCount = subCount; //获取到该节点拥有的子节点的数量,如果为0 ,则为叶子节点
  47. if(this.subCount == 0){
  48. this.setIsParent("false");
  49. }else{
  50. this.setIsParent("true");
  51. }
  52. }
  53. }

2、在servlet中获取到数据库的数据写入流中。
在servlet进行数据操作,查到所有节点数据
    
    
  1. protected void getList2(HttpServletRequest req, HttpServletResponse resp)
  2. throws ServletException, IOException {
  3. int id = RequestUtil.getIntParam(req, "id", 0); //页面获取传给后台的父节点id
  4. RegionDao rd = new RegionDaoimpl();
  5. List<region> relist =rd.getRegion(id); //获取到所有节点的信息
  6. String jsonStr = JsonUtil.transToJsonStr(relist); //装换成json格式并写入流中
  7. JsonUtil.outJsonStrAndColse(resp, jsonStr);
  8. }
dao层调用代码:(这里用到了dbutils的封装,)
sql查询涉及到相关子查询
查出id的所有信息的及这个id的子节点(也就是所有pid为跟这个id的相等的节点信息)
    
    
  1. public List<region> getRegion(int id) {
  2. String sql2 = "SELECT addr1.*,(SELECT COUNT(*) FROM region AS addr2 WHERE addr2.pid = addr1.id) AS subCount FROM region AS addr1 WHERE pid =?";
  3. List<region> relist=selectListObj(sql2, region.class, id);
  4. return relist;
  5. }
     
     
  1. @Override
  2. public <T> List<T> selectListObj(String sql, Class clazz, Object... params) {
  3. Connection conn = null;
  4. List<T> listObj = null;
  5. try {
  6. conn = JdbcUtilFactory.getInstance().getJdbcUtil().getcConnection();
  7. QueryRunner qrun = new QueryRunner();
  8. listObj=qrun.query(conn, sql,new BeanListHandler<T>(clazz) , params);
  9. } catch (SQLException e) {
  10. e.printStackTrace();
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. }
  14. return listObj ;
  15. }

  3、jsp页面获取到节点数据并初始化tree
    
    
  1. <script type="text/javascript">
  2. var setting = {
  3. async: { //异步提交(点击自动提交)
  4. enable: true, 提交路径
  5. url:getUrlx, //
  6. autoParam: ["id"] // 自动参数,点击时会自动ajax的方式向后台提价该对象的id,
  7. },
  8. check:{
  9. enable: true,
  10. chkStyle: "checkbox"
  11. },
  12. data: {
  13. simpleData: {
  14. enable: true,
  15. idKey:"id",
  16. pIdKey:"pid"
  17. },
  18. key:{
  19. name:"rname"
  20. }
  21. },
  22. callback: {
  23. onClick: onClickOper
  24. }
  25. }
  26. function onClickOper(event,treeId,treeNode){
  27. alert(treeNode.id); //点击对象的id
  28. ;
  29. }
  30. function getUrlx(){
  31. return "ZtreeServlet.do?code=async";
  32. }
  33. var zNodes =[ {id:0,rname:'中国',pid:-1,isParent:true}] //默认添加父节点
  34. $(document).ready(function(){
  35. $.fn.zTree.init($("#areaTree"), setting, zNodes);
  36. });
  37. </script>

容器:
  1. <ul id="areaTree" class="ztree"></ul> //tree必须放在ul中

其他的基础功能介绍

 
代码:
   
   
  1. <script type="text/javascript">
  2. var setting = {
  3. data: {
  4. simpleData: { //简单数据的设置
  5. enable: true,
  6. idKey: "id",
  7. pIdKey: "pid",
  8. rootPId: 0,
  9. },
  10. key: {
  11. name: "rname"
  12. }
  13. },
  14. async: { //异步加载的设置
  15. enable: true,
  16. url:"ZtreeServlet.do"
  17. },
  18. check: { //选中的设置
  19. autoCheckTrigger: true,
  20. chkboxType: { "Y": "p", "N": "s" },
  21. enable: true,
  22. chkStyle: "checkbox", //也可以设置radio(单选)
  23. },
  24. edit: { //编辑的设置
  25. enable: true,
  26. drag: {
  27. autoExpandTrigger: true
  28. },
  29. enable: true
  30. },
  31. callback : { //各种事件的发生
  32. onAsyncSuccess : onAsyncSuccess, //后台获取数据成功时发生
  33. onCheck: zTreeOnCheck , // 选中时触发
  34. onClick: zTreeOnClick, //点击时触发
  35. beforeRename: zTreeBeforeRename, //更新前触发
  36. onRename: zTreeOnRename, //更新时触发
  37. onRemove: zTreeOnRemove //删除时触发
  38. }
  39. };
  40. //以下是各种方法的实现
  41. //参数
  42. //event js event对象
  43. //treeId 对应tree的容器的id
  44. //treeNode 该节点的全部信息
  45. //msg 获取到该tree的全部节点信息(数组形式的字符串)
  46. var zTree;
  47. function onAsyncSuccess (event, treeId, treeNode, msg){
  48. zTree = $.fn.zTree.getZTreeObj(treeId); //获取节点数据
  49. var nodes = zTree.getNodes();
  50. }
  51. function zTreeOnCheck(event, treeId, treeNode) {
  52. alert(treeNode.id + ", " + treeNode.rname + "," + treeNode.checked);
  53. };
  54. function zTreeOnClick(event, treeId, treeNode) {
  55. alert(treeNode.id + ", " + treeNode.rname+ ", " + treeNode.pid);
  56. };
  57. //newName 更改的新名字  
  58. //isCancel isCancel = true 表示取消编辑操作(按下 ESC 或 使用 cancelEditName 方法) // isCancel = false 表示确认修改操作  
  59. function zTreeBeforeRename(treeId, treeNode, newName, isCancel) {
  60. return newName.length > 3;
  61. }
  62. function zTreeOnRename(event, treeId, treeNode, isCancel) {
  63. alert("zTreeOnRename="+treeNode.id + ", " + treeNode.rname+", " + treeNode.pid);
  64. }
  65. function zTreeOnRemove(event, treeId, treeNode) {
  66. alert(treeNode.id + ", " + treeNode.rname);
  67. }
  68. $(document).ready(function(){
  69. $.fn.zTree.init($("#areaTree"), setting, zTree);
  70. });
  71. </script>
  72. <ul id="areaTree" class="ztree"></ul>










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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值