码迷,mamicode.com
首页 > 其他好文 > 详细

ModelDriven和prepareable接口解决update时,只会保存提交的数据,而将其余为重新设值的数据update为空的问题

时间:2016-07-04 23:45:25      阅读:428      评论:0      收藏:0      [点我收藏+]

标签:

 1 public class EmployeeAction0 extends BaseAction implements
 2         ModelDriven<Employee>, Preparable {
 3     private IEmployeeService employeeService;
 4     private PageResult<Employee> pageResult;
 5     private Employee employee;
 6     // 必须进行实例化
 7     private EmployeeQuery baseQuery = new EmployeeQuery();
 8     private Long id;
 9 
10     public Long getId() {
11         return id;
12     }
13 
14     public void setId(Long id) {
15         this.id = id;
16         System.out.println("EmployeeAction.setId:"+id);
17     }
18 
19     public void setEmployeeService(IEmployeeService employeeService) {
20         this.employeeService = employeeService;
21     }
22 
23     // 在list.jsp显示数据
24     public PageResult<Employee> getPageResult() {
25         return pageResult;
26     }
27 
28     public EmployeeQuery getBaseQuery() {
29         return baseQuery;
30     }
31 
32     public void setBaseQuery(EmployeeQuery baseQuery) {
33         this.baseQuery = baseQuery;
34     }
35 
36     // 列表
37     @Override
38     public String execute() throws Exception {
39         System.out.println("execute");
40         this.pageResult = employeeService.findPageResult(baseQuery);
41         return SUCCESS;
42     }
43 
44     // 显示新增和修改页面
45     @Override
46     public String input() throws Exception {
47         System.out.println("input" + id);
48         return INPUT;
49     }
50 
51     // 处理新增和修改后的保存
52     public String save() throws Exception {
53         System.out.println("save");
54         if (id == null) {
55             employeeService.save(employee);
56         } else {
57             employeeService.update(employee);
58         }
59         return RELOAD;
60     }
61 
62     // 删除
63     public String delete() throws Exception {
64         System.out.println("delete" + id);
65         if (id != null) {
66             employeeService.delete(id);
67         }
68         return RELOAD;
69     }
70 
71     @Override
72     public Employee getModel() {
73         return employee;
74     }
75     // 访问每一个action的方法都会先调用此方法:前置方法
76     @Override
77     public void prepare() throws Exception {
78         System.out.println("prepare");
79     }
80 
81     // input,save方法之前执行
82     public void prepareInput() throws Exception {
83         System.out.println("prepareInput:" + id);
84         if (id != null) {
85             employee = employeeService.get(id);
86         }
87     }
88 
89     public void prepareSave() throws Exception {
90         System.out.println("prepareSave" + id);
91         if (id != null) {
92             employee = employeeService.get(id);
93         }
94     }
95 
96 }

该Action通过实现ModelDriven接口,使用getModel()方法获取到employee的模型,,此时employee为空,,因此在值栈的栈顶中任然是action存在于其中,,而通过实现prepareable接口,通过prepareInput()和prepareSave()2个方法,并在这2个方法内部提供一段代码使得employee根据id从数据库中获取到具体值,不再为空[注意:此处的id要能够被获取到,需要将default_stack拦截器栈中的params拦截器位置移动到prepare拦截器之前,首先由默认在栈顶的action将id设置到action中,然后prepare方法根据此时已经不为空的id从数据库中获取到employee的值,,然后在执行到modelDriven拦截器时,将已经不为空的employee压入到栈顶中,页面中的各个参数可以直接从值栈获取值,可以回显..而在此后修改完成提交进行保存时,发起了另一个save()的请求,此时同上,employee在该请求中由从数据库中的得到值,然后被压入栈顶,同时,jsp页面中的属性参数值将会设置栈顶中的employee中的相应属性值,,而其余属性保持原来的值不变,最后在save()方法中,因为存在id是否为空的判断,从而调用update()方法将该employee对象持久化到数据库中,而不会造成未重新设置值的属性被设置为null的问题..

ModelDriven和prepareable接口解决update时,只会保存提交的数据,而将其余为重新设值的数据update为空的问题

标签:

原文地址:http://www.cnblogs.com/tabchanj/p/5641851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!