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

 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的问题..

时间: 2024-10-26 20:00:24

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

mysql数据库update时只更新部分数据方法

需求:更新url中最一个字符的'-1'改为'-5',前面的内容保持不变 url列的内容如下:http://h5game.ecs.cedarmg.com/a/captal/dispther.do?deviceid=b-01-1 SELECT * from qrmsg WHERE url LIKE '%1' http://h5game.ecs.cedarmg.com/c/captal/dispther.do?deviceid=b-01-1 需要把最后这个-1改成-5 操作方式如下: UPDATE q

35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n

  35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和: (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n!): (4)编写测试类E,在测试类E的main方法中使用接口回调的形式来测试实现 接口的类. p

oracle执行update时卡死问题的解决办法

今天进行项目开发时,为了测试项目中SQL执行效果,就用PLSQL Developer执行了一下,没有commit就继续敲代码了,之后重新使用PLSQL Developer时,可能是网络原因,PLSQL Developer断开了与数据库连接并且卡死,便强制结束了.代码敲完后进行测试,项目执行后没效果,并且无响应,debug后发现jdbc执行SQL时没反应了,问了一下谷老师才找到原因. 由于在PLSQL Developer执行update时没有commit,oracle将该条记录锁住了. 可以通过以

微信公众号接口添加菜单时错误(errcode":40017 invalid button type)

POST提交时总是报错: {"errcode":40017,"errmsg":"invalid button type"} 最后查出来是由于数据中有中文引起的 解决: data = {"button":[ {"name": u"会员服务", "sub_button":[ {"type":"click","name&qu

[转]使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://repo1.maven.org/maven2 。

使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://repo1.maven.org/maven2 . 解决方式如下: 1.通过其它方式下载如下两个文件: http://repo1.maven.org/maven2/.index/nexus-maven-repository-index.properties http://repo1.maven.org/m

Oracle编辑数据时提示:这些查询结果不可更新,请使用ROWI或者SELECT……FOR UPDATE获得可更新结果

我们在对Oracle数据库进行操作时,有时会在查询完结果后想要对其中的某些数据进行操作,当我们点击编辑(一个锁标志)是,会提示我们上述问题中的错误:这些查询结果不可更新,请使用ROWI或者SELECT--FOR UPDATE获得可更新结果.按照错误提示的信息我们可以采用两种解决办法: 解决办法1:在查询语句后面写上for update,如:select * from 表名 for update: 解决办法2:在查询的列中使用rowid属性,如:select rowID, 表名.* from 表名

在linux下运行apt-get update 时,报错/var/lib/apt/lists/lock

在运行apt-get update 时,报下面的错误: E: 无法获得锁 /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)E: 无法对目录 /var/lib/apt/lists/ 加锁 这个问题是的意思是用于apt-get操作时的lock(应该是用于互斥的锁),出现了不能够得到锁的问题,针对此问题,如何解决呢? 可以以下命令进行操作, sudo rm /var/lib/apt/lists/lock sudo

ListView解决刷新时Item中的图片出现闪动

问题描述: Listview的item中有图片,在刷新时及时新数据和旧数据并无两样,imageview还是会闪动. 先来分析图片闪动可能的原因: 1)adapter = new WillListAdapter(MyApplication.getInstance(), wills); 不管此前adapter是否已绑定数据,或数据前后有没有变化,这条语句执行的时候,adapter都会使listview重绘所有item,这个闪动不可避免 2)adapter.notifyDataSetChanged()

beyond compare 比较Xls文件时只显示有差异的列

beyond compare是专业级的文件比较工具,可以比较所有的文件格式,已经成为我工作中的必备软件 在某一个工作项目中需要比较两个Xls文件,两个文件列是相同的,主要是看两个文件的列内容有什么变化 由于Xls文件的列有很多,大概60多个,而大部分列的内容是相同的,只是某几个列的某几个内容是有变化的 之前是一个列一个列的看,妈呢60多个列要看差异叫我怎么忍受,于是在Gogole上搜索"beyond compare xls 只显示差异列"但基本上前20页的内容都是无效的 无奈只能自己解