一.修改功能
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就把空值设置进去、
2.2 数据丢失的解决方案
- 前台传过来(隐藏域)
- sql不修改相应的字段
- 自己写sql直接控制
- jpa在字段上加
@Column(updatable = false)
- 通过id获取对象,再把传过来的参传过来、
- 这些解决方案:动态更新
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);
}
关注公众号,获取免费软件、资料,笔记等。