SSM Project Day03-菜单-修改功能【从页面到页面】

分析:

1.选择什么样的修改方式?
①从数据库中查询呈现到页面【数据库->页面–复杂】
②从页面上获取呈现信息导入到表单上呈现【页面->页面–性能更佳】

2.如何将页面上的信息拿到?
在这里插入图片描述
选中的checked对象拿到当前行对象

3.tr如何绑定数据?
找到tr对象创建的位置,或者渲染数据的位置,使用data

一、页面操作–MenuList.html

	$(function(){
		doGetObjects();
	//	按钮事件注册--删除按钮
		$(".input-group-btn")
				.on("click",".btn-delete",doDeleteObject)  //删除
				.on("click",".btn-add,.btn-update",doLoadEditUI)//添加菜单.btn-add、修改菜单操作.btn-update
		
	});

在这里插入图片描述

function doLoadEditUI() {
	    var title;
	    if($(this).hasClass("btn-add")){
	    	title="添加菜单信息";
		}else{
	    	//1.设置标题
	    	title="修改菜单信息";
	    //	2.获取选中当前行记录  (从tr对象中获取
		// 	var rowData=????
		//  3.重新绑定对象到mainContentId对象
		// 	$("#mainContentId").data("rowData",rowData);
		}

为什么是mainContentId对象?以为你最外层是他,从其中取到的数据要被替换到最外层显示。
在这里插入图片描述
在这里插入图片描述

问:如何获取tr?

显示的是treegrid,是写好的。先进源代码,绑定再获取。
找到treegrid

在这里插入图片描述

特殊技能:读懂源代码!进行修改!

在这里插入图片描述
把debugger的注释取消
在这里插入图片描述
效果:每执行一次箭头,显示一行内容
在这里插入图片描述
找到包含tr的tbody
在这里插入图片描述
在这里插入图片描述

1.menu.list

在这里插入图片描述

//菜单添加操作
	function doLoadEditUI() {
	    var title;
	    if($(this).hasClass("btn-add")){
	    	title="添加菜单信息";
		}else{
	    	//菜单修改操作
	    	//1.设置标题
	    	title="修改菜单信息";
	    //	2.获取选中当前行记录  (从tr对象中获取
			var rowData=$("tbody input[type='radio']:checked").parents("tr").data("rowData");
			console.log("list.rowData",rowData);//为什么是 list.rowData?只是一个输出提示
		//  3.重新绑定对象到mainContentId对象
			$("#mainContentId").data("rowData",rowData);
		}

	//    2.加载异步编辑页面
		var url="menu/doMenuEditUI";
		$("#mainContentId").load(url,function () {
			            $(".box-title").html(title);

		}); //假如mainContentId上有内容,则移除,变为新内容

	}

2.menu.edit

$(function () {
      $(".form-horizontal")
          .on("click",".load-sys-menu",doLoadZtreeNodes);  //显示菜单树
      $("#menuLayer")
          .on("click",".btn-cancel",doHideTree)   //给树取消显示函数
          .on("click",".btn-confirm",doSetSelectNode);//   设置选中节点
      //保存与取消----添加操作.btn-save
      $(".box-footer")
          .on("click",".btn-save",doSaveOrUpdate)
          .on("click",".btn-cancel",doCancel);

      //修改操作:绑定按行读取事件
      var rowData=$("#mainContentId").data("rowData");
      console.log("edit.rowData",rowData);
      
  });

测试:两次拿到的结果一样。
在这里插入图片描述

$(function () {
      $(".form-horizontal")
          .on("click",".load-sys-menu",doLoadZtreeNodes);  //显示菜单树
      $("#menuLayer")
          .on("click",".btn-cancel",doHideTree)   //给树取消显示函数
          .on("click",".btn-confirm",doSetSelectNode);//   设置选中节点
      //保存与取消----添加操作.btn-save
      $(".box-footer")
          .on("click",".btn-save",doSaveOrUpdate)
          .on("click",".btn-cancel",doCancel);

      //修改操作:绑定按行读取事件
      var rowData=$("#mainContentId").data("rowData");
      console.log("edit.rowData",rowData);
      if(rowData){
          doInitEditFormData(rowData);
      }
      
  });
     
     //修改操作--初始化表单数据
     function doInitEditFormData(rowData) {
             $("form input[value='"+rowData.type+"']").prop("checked"),
             $("#nameId").val(rowData.name),
             $("#urlId").val(rowData.url),
             $("#sortId").val(rowData.sort),
             $("#permissionId").val(rowData.permission),
             $("#parentId").data("parentId",rowData.parentId);
             $("#parentId").val(rowData.parentName);
     //        val()取值   val("")赋值
     }

在这里插入图片描述

bug:每一次修改,都插入了一条新数据,旧数据还在

服务端实现:

1.Dao

//    菜单修改操作
    int updateObject(SysMenu entity);

2.Mapper.xml

<!--修改菜单-->
    <update id="updateObject" parameterType="com.jt.sys.SysMenu">
        update sys_menus
        set
        name=#{name},
        type=#{type},
        sort=#{sort},
        url=#{url},
        permission=#{permission},
        parentId=#{parentId},
        modifiedUser=#{modifiedUser},
        modifiedTime=now()
        where id=#{id}
    </update>

3.Service

//    修改菜单操作
    int updateObject(SysMenu entity);
//  修改菜单
    @Override
    public int updateObject(SysMenu entity) {
        //        验证信息合法性
        if(entity==null){
            throw new IllegalArgumentException("保存的对象为空");
        }
//                  ①不允许重复
        if(StringUtils.isEmpty(entity.getPermission())) {
            throw new IllegalArgumentException("权限标识不能为空");
        }
        //             扩展     ②基于用户输入的Permission查询是否重复【很多】
        if(StringUtils.isEmpty(entity.getName())){
            throw new IllegalArgumentException("菜单名不能为空");
        }
//        保存数据
        int rows = sysMenuDao.updateObject(entity);    //按行数返回
        if(rows==0){
            throw new ServiceException("此记录可能已经不存在");
        }
//        返回结果
        return rows;
    }

4.Controller

    //    修改菜单信息入库
    @RequestMapping("doUpdateObjects")
    @ResponseBody
    public JsonResult doUpdateObjects(SysMenu entity){
        sysMenuService.saveObject(entity);
        return new JsonResult("Update Ok!");
    }

5.前端

//添加菜单---保存操作--或 修改操作
      function doSaveOrUpdate() {
      //    获取表单内容
          var params=doGetEditFormData();
          //判断是否为修改
          var rowData=$("#mainContentId").data("rowData");  //绑定按行读取
      //    假如是修改还需要向服务端传递一个id
          if(rowData){params.id=rowData.id;}

      //    异步提交
          var insertUrl="menu/doSaveObjects";
          var updateUrl="menu/doUpdateObjects";
          //判定
          var url=rowData?updateUrl:insertUrl;
          //验证
          console.log("edit.params:",params);
          $.post(url,params,function(result){
              if(result.state==1){      //如果添加成功了
                  alert(result.message);       //显示成功信息
                  doCancel();                  //退出添加页面
              }else {
                  alert(result.message);       //添加失败 显示失败信息
              }
          })
      }

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_31416771/article/details/88631330