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;
         }
         
    }


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

  • 相关阅读:
    Android sqlite日期存储
    Ubuntu10.04中间Leach协议一键安装
    Chapter 1 Securing Your Server and Network(1):选择SQL Server业务经理
    lua迭代器和仿制药for
    设定值范围+区间覆盖
    新手可以学习cocos2dx 3.0 组态(两)
    王立平--string.Empty
    Javascript操作阵列
    Dojo仪表板
    时间复杂度
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/3992920.html
Copyright © 2011-2022 走看看