保存功能js代码 js中将保存和修改功能写在一起了,这里通过判断是否有Id来判断页面路径应该请求后端的哪个路径的方式。
//保存功能
save(){
var url = "/employee/save";
//获到id的值
var employeeId = $("#employeeId").val();
if(employeeId){
url = "/employee/update?cmd=_update";
}
//easyui的form提交
editForm.form('submit', {
//提交的路径
url:url,
//提交之前的操作
onSubmit: function(){
// 做一些检查
// 返回false可以阻止提交;
return $(this).form('validate');
},
//data : {success:true/false,msg:xxx} -> 字符串
success:function(data){
var result = JSON.parse(data);
if(result.success){
employeeGrid.datagrid("reload");
}else{
$.messager.alert('错误',`失败了,打我啊! 原因是:${result.msg}`,"error");
}
//关闭弹出框
itsource.closeDialog();
}
});
},
数据丢失问题—修改信息时。
1、隐藏域传参–>最简单,不安全,如果字段太多,隐藏域就会写很多,代码多且乱。【很少使用】
2、SQL不去改动它—>简单,但以后要去修改就麻烦了。在domain的改字段上填加注解:@Column(updatable=false)
3、路径访问Controller层的每个方法前,都将先执行@ModelAtrribute里面的代码
@ModelAtrribute
/**
*ModelAttribute:路径访问Controller的每个方法,都会先执行它里面的代码
*/
@ModelAttribute("editEmployee")
public Employee beforeEdit(Long id,String cmd){
if(id!=null && "_update".equals(cmd)){
//修改才执行这个代码
Employee dbEmployee = employeeService.findOne(id);
//解决n-to-n的问题,把关联对象设置为null
dbEmployee.setDepartment(null);
return dbEmployee;
}
return null;
}
由于前端只要传id后端都会执行 @ModelAttribute(“editEmployee”)里的代码
影响性能
所以,前端多传一个参数 url = “/employee/update?cmd=_update”;只有修改传了_update的时候才会执行。
//保存功能
save(){
var url = "/employee/save";
//获到id的值
var employeeId = $("#employeeId").val();
if(employeeId){
url = "/employee/update?cmd=_update";
}
n to n的问题:一个持久化的OID是不允许被修改的(不能修改主键)。
Hibernate使用对象标识符(Object Identifier, OID)来建立内存中的对象和数据库表中记录的对应关系,对象的OID和数据库表的主键
解决办法:将关联对象设置为空,这样spring底层会new一个关联对象,这个对象不是持久化对象了,这样来修改关联对象的id了。