Java育儿园约架专栏

智能销售系统(四)问题解决

2019-09-30  本文已影响0人  磨陀货_
1.修改时密码显示问题
2.修改数据丢失问题
3.n-to-n持久问题

解决密码问题

添加的时候需要密码/修改的时候不需要密码

1.方式一:使用两个面板(一个有密码,一个没有密码) ---- 两个面板区别很大时,建议用这个
2.方式二:还是一个面板(添加的时候显示密码,修改的时候不显示密码) --- 当两个区别不大时 建议这个

这个需求 我们会在employee.jsp中修改 <tr>中加上id【<tr data-hidden="true">】
            <tr data-hidden="true">
                <td>密码:</td>
                <td><input id="password" class="easyui-validatebox" type="password" name="password" data-options="required:true"></input></td>
            </tr>
在employee.js中修改edit
edit(){
            $("*[data-hidden]").hide();
            ////把data-hidden 的所有隐藏起来
            $("*[data-hidden] input").validatebox("disable");
           // $("#password").textbox("disable");
}
添加的时候启用密码,修改的时候就禁用(禁用是不会传数据)

启用和禁用

        add(){
            //启用和禁用 除了修改的效果外(禁用是不会传数据的)
            //readonly只读,不管怎么样都会传数据
            //disable(禁用,不能修改也不能传参)
            $("*[data-hidden]").show();
            //把data-hidden 的所有显示出来
            $("*[data-hidden] input").validatebox("enable");
           // $("#password").textbox("enable");
        },

目前有一个小BUG

当你点击修改,什么都不改的情况下,点击保存。之后你会发现头像没有了;---形成了数据丢失 下面解决

解决数据丢失问题

数据丢失(在修改的时候---在传参的时候有些值没有传过去。对应的值就为空。但是执行SQL还在执行它)

解决方案:--- 动态修改

解决方式一:隐藏域
解决方式二:生成的时候 不修改 --- SQL
//@Column(updatable = false) --- 一加上这个注解 就是一经保存就不可修改属性;身份证号码;创建时间
@Column(updatable = false)
private String password;
解决方式三:先获取,在修改

数据丢失解决:SpringMVC之@ModelAttribute 【数据丢失也可解决】

举例:
@ModelAttribbute()一定要和修改关连起来

还有一个问题就是 性能上不是很完美 --- 因为这个解决丢失 删除什么都会有影响 所以我们在修改一下

解决n-to-n问题

问题二:当上面都做完之后,修改姓名,邮箱,年龄都可以;但是修改部门就会报错【n-to-n】 --- 持久化状态修改对象

以上错大概意思就是 :持久状态的对象是不能修改OID(不能修改主键)----说我们改部门id【Department】

1.部门什么时候变成持久对象的
2.我们又什么时候去改过他的id呢?

首先Employee是从数据库中来,他现在就是一个持久化对象
关键在于editEmployee---employee 现在是同一个对象
所以现在当传一些参数过来会设置一些参数


产生问题的原因,修改了id
解决办法 ---- 【关连对象都设置成为null】

我们只要加一句 部门为空 到时候部门就不会是持久化对象,会是new出来的。

完整代码

    //在任何方法前执行
    @ModelAttribute("editEmployee")
     public Employee beforeEdit(Long id,String cmd){
        //cmd就是让他可以准确的找到update  不要所有都找影响性能
        if (id != null && "update".equals(cmd)){
            Employee editEmployee = employeeService.getOne(id);
            //关连对象都设置为null,避免修改部门时出现n-to-n
            editEmployee.setDepartment(null);
            return editEmployee;
        }
        return null;
    }
    @RequestMapping("/update")
    @ResponseBody
    //这里@ModelAttribute("editEmployee")   要和上面能对应上
    public JsonResult update(@ModelAttribute("editEmployee") Employee employee){
        return saveOrUpdate(employee);
    }

注解篇:

注意点

1.from表单都使用post请求 ---- 不管是安全性还是放的数量上 都是post优

上一篇 下一篇

猜你喜欢

热点阅读