修改功能实现

一.修改功能

1.1 在form中加上id

有id才是修改,所以就把id隐藏起来(hidden

<form id="editForm" method="post">
    <input id="employeeId" type="hidden" name="id" />
   ...
</form>

1.2 点击修改回显

数据回显,包括部门

itsource ={
    ...
     update () {
            //1.拿到选中的那一条数据
            var row = employeeDataGrid.datagrid("getSelected");
            //2.如果没有选中,给出提示
            if(row==null){
                $.messager.alert('警告','没有货,滚蛋!',"info");
                return;
            }
            //3.清空表单并弹出数据
            editForm.form("clear");
            editDialog.dialog("center").dialog("open");
            //4.完成咱们的数据回显
            /**
             * 部门的回显
             */
            if(row.department){
                row["department.id"] = row.department.id;
            }
            editForm.form("load",row);
        }
}

1.3 save(保存)和update(修改)分开

id有值就是修改

1.3.1 前端请求改变

//保存修改功能(调用后台保存)
save(){
    //添加功能的路径
    var url ="/employee/save";
    //拿到表单中的员工id,如果id存在,代表修改
    var employeeId = $("#employeeId").val();
    if(employeeId){
        url = "/employee/update?cmd=update";
    }
    /**
     * 1.把表单数据传到后台
     */
    editForm.form('submit', {
        url:url, //提交的路径
       ...
    });
},

1.3.2 后台方法添加

添加和修改功能代码一样,就封装一个新方法。

/**
 * 前台会传相应的数据(Employee)过来
 *  需要返回:JsonResult{success:true/false,msg:"xx"}
 */
@RequestMapping("/save")
@ResponseBody
public JsonResult save(Employee employee){
     return this.saveOrUpdate(employee);
}

//修改方法
@RequestMapping("/update")
@ResponseBody
public JsonResult update(Employee employee){
    return this.saveOrUpdate(employee);
}

//添加或者修改
public JsonResult saveOrUpdate(Employee employee){
    try {
        employeeService.save(employee);
        return new JsonResult();
    } catch (Exception e) {
        e.printStackTrace();
        return new JsonResult(false,e.getMessage());
    }
}

二.数据丢失

2.1 数据丢失的原因

  • 前台没有传过来
  • 后台对象对没有传过来的值就设置为空
  • 修改的时候执行sql就把空值设置进去、

image

2.2 数据丢失的解决方案

  • 前台传过来(隐藏域)
  • sql不修改相应的字段
    • 自己写sql直接控制
    • jpa在字段上加 @Column(updatable = false)
    • 通过id获取对象,再把传过来的参传过来、
  • 这些解决方案:动态更新

image

2.3 解决数据丢失的代码

咱们解决了数据丢失后修改员工的部门时会出现一个n-to-n的错误,在获取员工对象后把它的部门设置为Null即可解决

2.3.1 更新前的操作

@ModelAttribute,你每次发送请求都会先执行它对应的方法。

参数cmd:前台请求方式判断是什么操作的参数。

/**
 * @ModelAttribute:只要你通过前台调用我的方法,我就要执行这个方法中的内容
 *
 */
@ModelAttribute("editEmployee")
public Employee beforeUpdate(Long id,String cmd){
    //我想要的是,只有修改执行相应功能
    if(id!=null && "update".equals(cmd)) {
       //根据id拿到相应的对象
        Employee employee = employeeService.findOne(id);
        //把关连对应的值设置为空,就可以解决n-to-n的问题
        employee.setDepartment(null);
        return employee;
    }
    return null;
}

2.3.2 修改方法获取Employee对象

//修改方法
/**
 *我们的这个employee对象中从 beforeUpdate中获取的
 */
@RequestMapping("/update")
@ResponseBody
public JsonResult update(@ModelAttribute("editEmployee") Employee employee){
    return this.saveOrUpdate(employee);
}

关注公众号,获取免费软件、资料,笔记等。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心之所向...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值