zoukankan      html  css  js  c++  java
  • ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)

           在springmvc+spring+mybatis里整合ztree实现增删改查,上一篇已经写了demo,以下就仅仅贴出各层实现功能的代码:

    Jsp页面实现功能的js代码例如以下:

    <script>
          //用于捕获分类编辑button的 click 事件,而且依据返回值确定是否同意进入名称编辑状态
         function beforeEditName(treeId, treeNode) {
                var zTree = $.fn.zTree.getZTreeObj("treeDemo");
                zTree.selectNode(treeNode);
                return true;
         }
          //移除分类前运行
         function beforeRemove(treeId, treeNode) {
                var zTree = $.fn.zTree.getZTreeObj("treeDemo");
                zTree.selectNode(treeNode);
                var confirmFlag = confirm("确认删除分类[ " + treeNode.name + " ]吗?" )
                var confirmVal = false;
                if(confirmFlag){
                     var data = {id:treeNode.id};
                    $.ajax({
                         async: false,
                         type: "post",
                         data:data,
                         url: "<%=request.getContextPath() %>/library/deleteLibrary/ ",
                         success: function(json){
                                if(json == "success" ){
                                    confirmVal = true;
                               } else{
    				alert('亲,删除失败!');
                               }
                         },
                         error: function(){
                               alert('亲,删除失败!');
                         }
                    });
               }
                return confirmVal;
         }
          //运行删除操作后提示
         function onRemove(e, treeId, treeNode) {
               alert('亲,删除成功!');
         }
          //用于捕获分类编辑名称结束(Input 失去焦点 或 按下 Enter 键)之后,更新分类名称数据之前的事件回调函数
         function beforeRename(treeId, treeNode, newName) {
                if (newName.length == 0 || newName.indexOf("请输入名称")>=0) {
    		 alert('亲,请输入分类名称!');
                     var zTree = $.fn.zTree.getZTreeObj("treeDemo");
                     setTimeout( function(){zTree.editName(treeNode)}, 10);
                     return false;
               }
                if(newName.length > 15){
    		alert('亲,分类名称过长!');
                    var zTree = $.fn.zTree.getZTreeObj("treeDemo");
                    setTimeout( function(){zTree.editName(treeNode)}, 10);
                    return false;
               }
               native_name = treeNode.name;
               return true;
         }
          //运行编辑操作
         function onRename(e, treeId, treeNode) {
                if(native_name == treeNode.name){
                     return;
                }
                var data = {id:treeNode.id,level_id:treeNode.level,pid:treeNode.pId,name:treeNode.name};
                $.ajax({
                    async: false,
                    type: "post",
                    data:data,
                    url: "<%=request.getContextPath() %>/library/updateLibraryName/ ",
                    success : function(json){
                          if(json == "success" ){
    			   alert('操作成功!');
                         } else{
    			   alert('亲,操作失败,请稍后再试!');
                         }
                    },
                    error : function()    {
    		     alert('亲,网络有点不给力呀!');
                    }
               });
         }
         
          //加入子分类
         function addHoverDom(treeId, treeNode) {
                var sObj = $("#" + treeNode.tId + "_span");
                if (treeNode.editNameFlag || $("#addBtn_" +treeNode.tId).length>0 || treeNode.level == 3) 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("treeDemo");
                     var treeNodes;
                    $.ajax({
                         async: false,
                         type: "post",
                         url: "<%=request.getContextPath() %>/library/saveLibrary/ ",
                         success : function(libraryId){
                                if(libraryId != "" ){
                                    treeNodes = zTree.addNodes(treeNode, {id:(libraryId), pId:treeNode.id, name:"请输入名称" });
                               }
                                if (treeNodes) {
                                    zTree.editName(treeNodes[0]);
                               }
                         },
                         error : function(){
                               alert('亲,网络有点不给力呀!');
                         }
                    });
                     return false;
               });
         }
          //父级分类去除删除功能
         function setRemoveBtn(treeId, treeNode) {
            return !treeNode.isParent;
         }
         
          //鼠标移开button消失
         function removeHoverDom(treeId, treeNode) {
               $( "#addBtn_"+treeNode.tId).unbind().remove();
         };
         
          //加入button点击事件
         function addClick(){
               $( "#addParent").bind("click" , {isParent:true}, add);
         }
    
          //移除分类
         function remove(e) {
                var zTree = $.fn.zTree.getZTreeObj("treeDemo"),
               nodes = zTree.getSelectedNodes(),
               treeNode = nodes[0];
                if (nodes.length == 0) {
                     alert( "亲,请先选择一个分类!" );
                     return;
               }
                var callbackFlag = $("#callbackTrigger" ).attr("checked");
               zTree.removeNode(treeNode, callbackFlag);
         };
         
          //展开所有分类
         function expandAllFlag(){
               zTree_Menu.expandAll( true);
         }
          //合并所有分类
         function combineAllFlag(){
               zTree_Menu.expandAll( false);
         }
         
          //载入ztree
         function onloadZTree(){
                var ztreeNodes;
               $.ajax( {
                    async : true, //是否异步
                    cache : false, //是否使用缓存
                    type : 'post', //请求方式,post
                    dataType : "json", //传输数据格式
                    url : "<%=request.getContextPath() %>/library/findAllLibrary/ ", //请求链接
                    error : function() {
                         alert('亲,网络有点不给力呀!');
                    },
                    success : function(data) {
                         ztreeNodes = eval( "["+data+"]" ); //将string类型转换成json对象
                         $.fn.zTree.init($( "#treeDemo"), setting, ztreeNodes);
                         zTree_Menu = $.fn.zTree.getZTreeObj("treeDemo" );
                         $( "#selectAll").bind("click" , selectAll);
                         expandAllFlag();
                         addClick();
                    }
               });
         }
         
          //初始化操作
         $(document).ready( function(){
               onloadZTree();
         });
    </script>

    备注:后台传过来的json数据一定运行这个操作:eval( "["+data+"]" ) 将string转换为对象

    Controller层代码例如以下:

    import java.util.List;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    @RequestMapping(value="library/")
    public class LibraryController {
    
         @Autowired
         public LibraryService libraryService;
        
         /**
         * 跳转到分类页面
         * @return
         */
         @RequestMapping(value="toListLibrary/")
         public String toListLibrary(){
              return "library/listLibrary";
         }
        
         /**
         * 查询全部分类信息
         * @return
         */
         @RequestMapping(value="findAllLibrary/")
         @ResponseBody
         public List<Object> findAllLibrary(HttpServletRequest request, HttpServletResponse response){
              return libraryService.findAllLibrary();
         }
        
         /**
         * 保存分类
         * @return
         */
         @RequestMapping(value="saveLibrary/")
         @ResponseBody
         public String saveLibrary(HttpServletRequest request, HttpServletResponse response){
              String libraryId = UUIDUtil.randomUUID();
              return libraryId;
         }
        
         /**
         * 更新分类名称
         * @return
         */
         @RequestMapping(value="updateLibraryName/")
         @ResponseBody
         public String updateLibraryName(HttpServletRequest request, HttpServletResponse response, Library library) {
              String createname=(String) request.getSession().getAttribute(Constants.CURRENT_USER_NAME);
              library.setCreate_user(createname);
              library.setUpdate_user(createname);
              return libraryService.addOrUpdateLibrary(library);
         }
        
        
         /**
         * 删除分类
         * @return
         */
         @RequestMapping(value="deleteLibrary/")
         @ResponseBody
         public String deleteLibrary(HttpServletRequest request, HttpServletResponse response,@RequestParam(value = "id") String id) {
              return libraryService.deleteLibrary(id);
         }
    }

    service层代码例如以下:

    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.commons.lang3.StringUtils;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class LibraryService {
         protected final static Log log = LogFactory.getLog(LibraryService.class);
        
         @Autowired
         private LibraryMapper libraryMapper;
        
         /**
         * 查询全部分类信息
         * @return
         */
         public List<Object> findAllLibrary(){
              List<Object> listZTree = new ArrayList<Object>();
              List<Library> listLibrary  = libraryMapper.findAllLibrary();
              String str = "";
              for (int i = 0; i < listLibrary.size(); i++) {
                   Library  library = listLibrary.get(i);//分类信息
                   str = "{id:'" +library.getId() + "', pId:'"+library.getPid()+"', name:""+library.getName()+"" }";//封装ztree须要格式的字符串
                   log.info(str);
                   listZTree.add(str);
              }
              return listZTree;
         }
        
         /**
         * 保存或更新分类信息
         * @param library
         * @return
         */
         public String addOrUpdateLibrary(Library library){
              int numFlag = 0;
              //依据id查询分类信息
              if (StringUtils.isBlank(library.getId())) {
                   return "error";
              }
              int num = libraryMapper.findLibraryById(library.getId());
              if (num >0) {//更新信息
                   library.setUpdate_time(new Date());
                   library.setCreate_user(null);
                   library.setPid(null);
                   numFlag = libraryMapper.updateByPrimaryKeySelective(library);
              }else{//插入信息
                   if(library.getPid().equals("null")){
                        library.setPid("0");
                   }
                   int orderId = libraryMapper.findLastLibrary(library);
                   orderId++;
                   library.setCreate_time(new Date());
                   library.setUpdate_time(new Date());
                   library.setOrder_id(orderId);
                   numFlag = libraryMapper.insert(library);
              }
              return  "success";
         }
        
         /**
         * 删除分类
         * @param id
         * @return
         */
         public String deleteLibrary(String id){
              int num = libraryMapper.deleteByPrimaryKey(id);
              return  "success";
         }
        
    }
    备注:运行完数据操作须要推断返回值,这里我直接返回success活error了。

    Mapper层代码例如以下

    import java.util.List;
    import java.util.Map;
    
    public interface LibraryMapper extends BaseMapper<Library,String>{
      
         /**
         * 查询全部分类信息
         * @return
         */
         public List<Library> findAllLibrary();
        
        
         /**
         * 依据id查询条数
         * @param id
         * @return
         */
         public int findLibraryById(String id);
        
         /**
         * 查询最大排序号
         * @return
         */
         public int findLastLibrary(Library library);
    
    }
    备注:BaseMapper里有几个公用的增删改查的方法,Library是数据库表相应的实体,都非常easy,避免代码过多这里就省略了

    <?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= "LibraryMapper" >
      < resultMap id= "BaseResultMap" type= "Library" >
        <id column ="id" property="id" jdbcType= "VARCHAR" />
        <result column ="pid" property="pid" jdbcType= "VARCHAR" />
        <result column ="name" property="name" jdbcType= "VARCHAR" />
        <result column ="create_time" property="create_time" jdbcType= "TIMESTAMP" />
        <result column ="update_time" property="update_time" jdbcType= "TIMESTAMP" />
        <result column ="is_delete" property="is_delete" jdbcType= "INTEGER" />
        <result column ="update_user" property="update_user" jdbcType= "VARCHAR" />
        <result column ="create_user" property="create_user" jdbcType= "VARCHAR" />
        <result column ="level_id" property="level_id" jdbcType= "INTEGER" />
        <result column ="order_id" property="order_id" jdbcType= "INTEGER" />
      </ resultMap>
      < sql id= "Base_Column_List" >
        id, pid , name, create_time, update_time, is_delete, update_user, create_user, level_id,
        order_id
      </ sql>
    
      <!-- 依据id查询分类信息是否存在 -->
      < select id= "findLibraryById" parameterType ="java.lang.String" resultType= "java.lang.Integer" >
         select count(*) from onair_vms_library
         where is_delete=1 and id = #{id,jdbcType=VARCHAR}
      </ select>
      <!-- 依据 pid查询最大排序号 -->
      < select id= "findLastLibrary" resultType ="java.lang.Integer" parameterType="Library" >
         SELECT MAX(order_id) as order_id  FROM onair_vms_library
         where pid = #{pid,jdbcType=VARCHAR}
      </ select>
      <!-- 查询全部分类信息 -->
      < select id= "findAllLibrary" resultMap ="BaseResultMap">
         select
         <include refid ="Base_Column_List"/>
         from onair_vms_library
         where is_delete = 1 order by order_id
      </ select>
     
      < select id= "selectByPrimaryKey" resultMap ="BaseResultMap" parameterType="java.lang.String" >
        select
        <include refid ="Base_Column_List" />
        from onair_vms_library
        where id = #{id,jdbcType=VARCHAR}
      </ select>
      < delete id= "deleteByPrimaryKey" parameterType="java.lang.String" >
        update  onair_vms_library set is_delete = 0
        where id = #{id,jdbcType=VARCHAR}
      </ delete>
      < insert id= "insert" parameterType="Library" >
        insert into onair_vms_library (id, pid, name,
          create_time, update_time, is_delete,
          update_user, create_user, level_id,
          order_id)
        values (#{id,jdbcType=VARCHAR}, #{pid,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},
          #{create_time,jdbcType=TIMESTAMP}, #{update_time,jdbcType=TIMESTAMP}, #{is_delete,jdbcType=INTEGER},
          #{update_user,jdbcType=VARCHAR}, #{create_user,jdbcType=VARCHAR}, #{level_id,jdbcType=INTEGER},
          #{order_id,jdbcType=INTEGER})
      </ insert>
      < update id= "updateByPrimaryKey" parameterType="Library" >
        update onair_vms_library
        set pid = #{pid,jdbcType=VARCHAR},
          name = #{name,jdbcType=VARCHAR},
          create_time = #{create_time,jdbcType=TIMESTAMP},
          update_time = #{update_time,jdbcType=TIMESTAMP},
          is_delete = #{is_delete,jdbcType=INTEGER},
          update_user = #{update_user,jdbcType=VARCHAR},
          create_user = #{create_user,jdbcType=VARCHAR},
          level_id = #{level_id,jdbcType=INTEGER},
          order_id = #{order_id,jdbcType=INTEGER}
        where id = #{id,jdbcType=VARCHAR}
      </ update>
    </mapper>
    
    备注:mapper相应的xml

    与jsp相应的VO层代码例如以下:

    public class LibraryVo {
    
         /*  id      */
         private String id;
         /*  目标id  */
         private String targetId;
         /*  pid     */
         private String pId;
         /*  目标pid      */
         private String targetPId;
         /*  "inner":成为子节点,"prev":成为同级前一个节点,"next":成为同级后一个节点  */
         private String moveType;
    
         public String getId() {
                return id;
         }
    
         public void setId(String id) {
                this. id = id;
         }
    
         public String getTargetId() {
                return targetId;
         }
    
         public void setTargetId(String targetId) {
                this. targetId = targetId;
         }
    
         public String getpId() {
                return pId;
         }
    
         public void setpId(String pId) {
                this. pId = pId;
         }
    
         public String getTargetPId() {
                return targetPId;
         }
    
         public void setTargetPId(String targetPId) {
                this. targetPId = targetPId;
         }
    
         public String getMoveType() {
                return moveType;
         }
    
         public void setMoveType(String moveType) {
                this. moveType = moveType;
         }
         
    }


    上面的代码实现了主要的增删改查,有哪些地方有问题欢迎指正,也欢迎交流,每一次的进步都离不开大家的帮助。

  • 相关阅读:
    547. Friend Circles
    399. Evaluate Division
    684. Redundant Connection
    327. Count of Range Sum
    LeetCode 130 被围绕的区域
    LeetCode 696 计数二进制子串
    LeetCode 116 填充每个节点的下一个右侧节点
    LeetCode 101 对称二叉树
    LeetCode 111 二叉树最小深度
    LeetCode 59 螺旋矩阵II
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/3992920.html
Copyright © 2011-2022 走看看