标签:
因为,使用模型驱动,可以将不为空的employee压入栈顶,从而使得页面中以employee的属性名作为name的Struts标签元素能够获取到对应属性名的属性值,在点击修改后,可以实现回显.
具体的:
由于modelDriven拦截器先于input()方法执行,因此需要将获取employee的方法提前到modelDriven拦截器之前,即在prepareInput()方法获取employee,此时employee就不空了,再在后面执行到modelDriven拦截器时就将employee对象放入栈顶,从而页面的中的各个元素可以直接获取employee中的get方法进行回显.
同理,在input界面还有一个隐藏域保存id,点击保存后向save发送请求.在第一个参数拦截器时,action在栈顶,它获取到id的值,将其设置到其属性中,然后在prepareSave()方法中,根据此不为空的id值调用get方法获取到对应id的employee对象,,然后在modelDriven拦截器处将employee压入栈顶,此时employee中存有数据库的原始值,,然后在来到第二次参数拦截器处,,获取到页面中的各个参数,,并将employee中的对应属性的属性值覆盖,,此时新旧数据在一起,,最后在save()方法中被保存写入数据库.避免了修改时只会保存填写值的属性的值,而原本有值但是未出现在编辑页面的属性被设置为空值的问题.
为何使用二次参数拦截器栈,,为何需要在beforeInput() [即prepareInput(),本项目中分装为beforeInput()方法] 方法中获取employee
标签:
原文地址:http://www.cnblogs.com/tabchanj/p/5651872.html