java实现Ztree的增删改查(包含后台代码)

简介: 前端页面、js代码以及配置项、后台代码。

1、前端页面


<body>
    <div class=" page-content clearfix">
      <div class="t_Record" style="width:90%">
        <div class="tree-ads" id="tree-ads">
          <div id="tree-sorts" class="ztree"></div>
        </div>
      </div>
    </div>
  </body>


2、js代码以及配置项


$(function() {
    onLoadZTree();
  })
  /*******树状图*******/
  var setting = {
    view: {
      dblClickExpand: false,
      showLine: false,
      selectedMulti: false,
      addHoverDom: addHoverDom, //显示按钮
      removeHoverDom: removeHoverDom, //隐藏按钮
    },
    edit: {
      enable: true,
      editNameSelectAll: true,
      removeTitle: '删除',
      renameTitle: '重命名'
    },
    data: {
      simpleData: {
        enable: true,
        idKey: "id",
        pIdKey: "pId",
        rootPId: "0"
      }
    },
    callback: {
      beforeRemove: beforeRemove, //点击删除时触发,用来提示用户是否确定删除
      beforeEditName: beforeEditName, //点击编辑时触发,用来判断该节点是否能编辑,是否进入编辑状态
      beforeRename: beforeRename, //编辑结束时触发,用来验证输入的数据是否符合要求
    }
  };
  function onLoadZTree() {
    $.ajax({
      async: false, //是否异步
      cache: false, //是否使用缓存
      type: 'POST', //请求方式:post
      url: 'ads/cat/list', //请求的路径
      success: function(data) {
        treeNodes = data; //把后台封装好的简单Json格式赋给treeNodes
      }
    });
    var t = $("#tree-sorts");
    t = $.fn.zTree.init(t, setting, treeNodes);
    t.expandAll(true);
  }
  //新增
  function addHoverDom(treeId, treeNode) {
    var sObj = $("#" + treeNode.tId + "_span");
    if(treeNode.editNameFlag || $("#addBtn_" + treeNode.tId).length > 0) return;
    var addStr = "<span class='button add' id='addBtn_" + treeNode.tId +
      "' title='新增' onfocus='this.blur();'></span>";
    sObj.after(addStr);
    var btn = $("#addBtn_" + treeNode.tId);
    if(btn) btn.bind("click", function() {
      var zTree = $.fn.zTree.getZTreeObj("tree-sorts");
      layer.prompt({
        formType: 0,
        value: '',
        title: '请输入节点名称'
      }, function(value, index) {
        if(value.trim().length === 0) {//非空验证
          return false;
        }
        layer.close(index)
        var pid = treeNode.id;
        var name = value;
        $.ajax({
          type: "POST",
          async: false,
          url: "ads/sort/add",
          data: {
            "pid": pid,
            "name": name
          },
          success: function(data) {
            if(data.status == 200) {
              zTree.addNodes(treeNode, {
                pId: treeNode.id,
                name: value
              });
              onLoadZTree() //重新加载,不然再次添加会报错
              layer.msg('添加成功', {
                icon: 1,
                time: 1000
              });
            } else {
              onLoadZTree()
              layer.msg('' + data.msg + '', {
                icon: 5,
                time: 1000
              });
            }
          }
        });
      });
    });
  };
  //移除鼠标隐藏按钮
  function removeHoverDom(treeId, treeNode) {
    $("#addBtn_" + treeNode.tId).unbind().remove();
  }
  /*
   * 编辑
   */
  function beforeEditName(treeId, treeNode) {
    return true;
  }
  function beforeRename(treeId, treeNode, newName, isCancel) {
    if(newName.trim().length === 0) {
      layer.msg('名称不能为空', {
        icon: 5,
        time: 1000
      })
      return false;
    } else {
      $.ajax({
        type: "POST",
        async: false,
        url: "ads/sort/update",
        data: {
          "id": treeNode.id,
          "name": newName
        },
        success: function(data) {
          if(data.status == 200) {
            onLoadZTree() //重新加载,不然再次添加会报错
            layer.msg('修改成功', {
              icon: 1,
              time: 1000
            });
            return true;
          } else {
            onLoadZTree()
            layer.msg('' + data.msg + '', {
              icon: 5,
              time: 1000
            });
            return false;
          }
        }
      });
    }
  }
  /*
   * 删除
   */
  function beforeRemove(treeId, treeNode) {
    if(treeNode.isParent == true) {
      layer.msg('请首先删除子节点', {
        icon: 5,
        time: 1000
      });
      return false;
    }
    layer.confirm('确认要删除吗?', {
        btn: ['确定', '取消']
      }, function(index) {
        $.ajax({
          type: "POST",
          async: false,
          url: "ads/sort/delete",
          data: {
            "id": treeNode.id,
            "pId": treeNode.pId
          },
          success: function(data) {
            if(data.status == 200) {
              onLoadZTree() //重新加载,不然再次添加会报错
              layer.msg('删除成功', {
                icon: 1,
                time: 1000
              });
              return true;
            } else {
              onLoadZTree()
              layer.msg('' + data.msg + '', {
                icon: 5,
                time: 1000
              });
              return false;
            }
          }
        });
        layer.close(index);
      },
      function() {//取消时刷新tree
        onLoadZTree()
        layer.msg('已取消', {
          icon: 6,
          time: 1000
        });
        return false;
      }
    );
  }


注意:在前端页面中,ztree默认的css中没有新增按钮,需要在样式文件添加如下一句样式


.ztree li span.button.add {margin-right:2px; background-position:-143px 0px; vertical-align:top; *vertical-align:middle}


3、后台代码,主要就是增加和删除,其他的不写


//增加
public Result addTbcontentCategory(long pid, String name) throws Exception {
    TbContentCategory category=new TbContentCategory();
    category.setParentId(pid);
    category.setName(name);
    category.setStatus(1);
    category.setIsParent(false);
    category.setSortOrder(getOrder(pid));
    Date date=new Date();
    category.setCreated(date);
    category.setUpdated(date);
    categoryMapper.insert(category);
    //查看是否为父结点
    TbContentCategory contentCategory = categoryMapper.selectByPrimaryKey(pid);
    //不是父节点修改为父结点
    if(!contentCategory.getIsParent()){
      contentCategory.setIsParent(true);
      categoryMapper.updateByPrimaryKey(contentCategory);
    }
    return Result.ok();
  }
  //排序
  private int getOrder(long pid) {
    TbContentCategory category = categoryMapper.selectByPrimaryKey(pid);
    if(category==null) {
      return 1;
    }else {
      TbContentCategoryExample example=new TbContentCategoryExample();
      TbContentCategoryExample.Criteria criteria = example.createCriteria();
      criteria.andParentIdEqualTo(pid);
      List<TbContentCategory> cat = categoryMapper.selectByExample(example);
      if(cat.size()<=0||cat==null) {
        return 1;
      }else {
        return cat.size()+1;
      }     
    }
  }
//删除
public Result deleteTbcontentCategory(long id,long pId) throws Exception {
    TbContentCategory category = categoryMapper.selectByPrimaryKey(pId);
    categoryMapper.deleteByPrimaryKey(id);
    if(category.getIsParent()){//如果是父类目,改成非父类目
      category.setIsParent(false);
      categoryMapper.updateByPrimaryKey(category);
    }
    return Result.ok();
  }


有不对的地方,还希望大神指正,3Q



相关文章
|
5天前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
17 5
|
7天前
|
Java API 开发者
探索Java中的Lambda表达式:简洁与强大的代码实践
本文深入探讨Java中Lambda表达式的定义、用法及优势,通过实例展示其如何简化代码、提升可读性,并强调在使用中需注意的兼容性和效率问题。Lambda作为Java 8的亮点功能,不仅优化了集合操作,还促进了函数式编程范式的应用,为开发者提供了更灵活的编码方式。
|
3天前
|
Java 开发者
探索Java中的Lambda表达式:简化你的代码之旅##
【8月更文挑战第62天】 Java 8的发布为开发者带来了诸多新特性,其中最引人注目的无疑是Lambda表达式。这一特性不仅让代码变得更加简洁,还极大地提升了开发的效率。本文将通过实际示例,展示如何利用Lambda表达式来优化我们的代码结构,同时探讨其背后的工作原理和性能考量。 ##
|
6天前
|
Java API 开发者
探索Java中的Lambda表达式:简化代码,提升效率
【9月更文挑战第27天】在Java 8中引入的Lambda表达式为编程带来了革命性的变化。通过简洁的语法和强大的功能,它不仅简化了代码编写过程,还显著提升了程序的执行效率。本文将深入探讨Lambda表达式的本质、用法和优势,并结合实例演示其在实际开发中的应用。无论你是Java新手还是资深开发者,都能从中获得启发,优化你的代码设计。
|
7天前
|
Java Linux Python
Linux环境下 代码java调用python出错
Linux环境下 代码java调用python出错
20 3
|
6天前
|
存储 Java 索引
使用java代码实现左右括号查找
使用java代码实现左右括号查找
|
7天前
|
算法 Java
java 概率抽奖代码实现
java 概率抽奖代码实现
|
2月前
|
Java 数据安全/隐私保护
Java代码的执行顺序和构造方法
构造方法是类的一种特殊方法,用于初始化新对象。在 Java 中,每个类默认都有一个与类名同名的构造方法,无需返回类型。构造方法不能用 static、final、synchronized、abstract 或 native 修饰。它可以重载,通过不同的参数列表实现多种初始化方式。构造方法在对象实例化时自动调用,若未显式声明,默认提供一个无参构造方法。构造代码块和静态代码块分别用于对象和类的初始化,按特定顺序执行。
22 0
|
4月前
|
Java
Java代码的执行顺序
Java代码的执行顺序
23 1
|
Java
Java基础-代码执行顺序(重要)
Java代码初始化顺序:     1.由 static 关键字修饰的(如:类变量(静态变量)、静态代码块)将在类被初始化创建实例对象之前被初始化,而且是按顺序从上到下依次被执行。静态(类变量、静态代码块)属于类本身,不依赖于类的实例。     2.没有 static 关键字修饰的(如:实例变量(非静态变量)、非静态代码块)初始化实际上是会被提取到类的构造器中被执行的,但是会比类构造器中的代码
2347 1
下一篇
无影云桌面