




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于struts2中prepare接口实现数据准备之前做过不少的项目,所有的action只实现了一个execute()方法,也用到过Preparable接口,并没注意到它的具体用法。随着项目的需 求的增加,按照以前的方法,每一个功能都需要一个action,这样势必会造成action类的大规模膨胀。所以决定采取action!method的形 式,这样在一个action中可以包含很多方法,减少了action类的数量,也便于维护。把crud方法放在一个action类中,就必定会涉及到一些数据准备的事情,所以用Preparable接口就再合适不过了,实现这个接口的prepare()方法,这个方法会在action类的所有方法执行前执行,另外我们也可以按照它的规则来写一些其它形式的prepare方法,例如aciton中有一个方法叫input(),那么我们可以实现一个prepareInput方法,这样在input()执行前,会执行prepareInput()方法。好了,言归正传,我们有这样的一个action:Java代码 1. package ht.gisoa.action; 2.3. import ht.gisoa.model.Sysconfig; 4. import ht.gisoa.service.SysconfigManager; 5.6. import java.util.List; 7. import java.util.Map; 8.9. import javax.servlet.http.HttpServletRequest; 10.11. import dparam.NamedParameterJdbcTemplate; 12.13. import com.opensymphony.webwork.ServletActionContext; 14. import erceptor.ServletRequestAware; 15. import erceptor.SessionAware; 16. import com.opensymphony.xwork.ActionSupport; 17. import com.opensymphony.xwork.ModelDriven; 18. import com.opensymphony.xwork.Preparable; 19. import com.thoughtworks.xstream.XStream; 20.21. public class SystemConfigAction extends ActionSupport implements Preparable,SessionAware,ServletRequestAware,ModelDriven 22. /* 23. * 24. */ 25.26. private Map session ; 27. private HttpServletRequest request; 28.29. private NamedParameterJdbcTemplate namedParameterJdbcTemplate = null; 30.31. private Double hignSpeed = 0.0; 32. private Double midSpeed = 0.0; 33. private Double lowSpeed = 0.0; 34.35. private static final long serialVersionUID = 1L; 36. private SysconfigManager sysconfigManager = null; 37.38.39. private Long id ; 40. private Sysconfig entity; 41.42. public void setId(Long id) 43. this.id = id; 44. 45.46. public String editSpeed() throws Exception 47. Map configs = sysconfigManager.getSpeedConfig() ; 48. ServletActionContext.getRequest().setAttribute(configs, configs); 49. return this.SUCCESS; 50. 51.52. public String input() throws Exception 53. return input; 54. 55.56. public String list() 57. List speedCollection = sysconfigManager.getSpeedList(); 58. ServletActionContext.getRequest().setAttribute(speedCollection, speedCollection); 59. return list; 60. 61.62. public String save() throws Exception 63. sysconfigManager.mergy(entity); 64. return reload; 65. 66.67. public String delete() throws Exception 68. sysconfigManager.delete(id); 69. return reload; 70. 71.72. public SysconfigManager getSysconfigManager() 73. return sysconfigManager; 74. 75. public void setSysconfigManager(SysconfigManager sysconfigManager) 76. this.sysconfigManager = sysconfigManager; 77. 78.79. public Double getHignSpeed() 80. return hignSpeed; 81. 82.83. public void setHignSpeed(Double hignSpeed) 84. this.hignSpeed = hignSpeed; 85. 86.87. public Double getMidSpeed() 88. return midSpeed; 89. 90.91. public void setMidSpeed(Double midSpeed) 92. this.midSpeed = midSpeed; 93. 94.95. public Double getLowSpeed() 96. return lowSpeed; 97. 98.99. public void setLowSpeed(Double lowSpeed) 100. this.lowSpeed = lowSpeed; 101. 102.103. public void setSession(Map session) 104. this.session = session; 105. 106.107. public void setServletRequest(HttpServletRequest request) 108. this.request = request; 109. 110.111. public void prepare() throws Exception 112.113. 114.115. public void prepareModel() throws Exception 116. if (id=null) 117. System.out.println(id=null); 118. entity = new Sysconfig(); 119. entity.setKeyType(1L); 120. else 121. System.out.println(id=+id); 122. entity = sysconfigManager.get(id); 123. 124. 125.126. public void prepareInput() throws Exception 127. prepareModel(); 128. 129. public void prepareSave() throws Exception 130. prepareModel(); 131. 132.133. public Object getModel() 134. return entity; 135. 136. 这里要注意,要在spring中配置该action的作用域为prototype,否则,不同的方法之间会出现数据混乱的情况:Xml代码 1. 3. 4. 5. 6. sysconfig_input.jsp代码如下:Jsp代码 1. 2. 3. 4. 5. 6. 7.8. 9. 10. 11. $msg 12. 13. 创建修改设置 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 我们编辑完信息,提交后,会执行action中的save方法,按道理,表单提交后,会将action中的model填充好数据,但是save方法 之前又会执行prepareSave方法,从数据库里获取一次数据,这样不就把之前填充好的数据冲掉了吗?仔细想想也确实是这样的.那么该如何解决这种矛盾呢,立即使出google大法,查了一下关于interceptor的资料,有这样的一个interceptor:paramsPrepareParamsStack,paramsPrepareParamsStack主要解决了ModelDriven和Preparable的配合问题,从字面上理解来说,这个stack的拦截器调用的顺序为:首先params,然后prepare,接下来modelDriven,最后再params。Struts 2.0的设计上要求modelDriven在params之前调用,而业务中prepare要负责准备model,准备model又需要参数,这就需要在prepare之前运行params拦截器设置相关参数,这个也就是创建paramsPrepareParamsStack的原因。流程如下: 1. params拦截器首先给action中的相关参数赋值,如id 2. prepare拦截器执行prepare方法,prepare方法中会根据参数,如id,去调用业务逻辑,设置model对象 3. modelDriven拦截器将model对象压入value stack,这里的model对象就是在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国微植物(微藻)行业市场发展趋势与前景展望战略研究报告
- 区块链技术助力提升嵌入式系统的安全性与可靠性
- 2025-2030中国工程投影机行业市场深度调研及前景趋势与投资研究报告
- 2025-2030中国嵌合抗原受体细胞治疗行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国小型蹦床行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国宠物服务行业发展现状及前景趋势与投资研究报告
- 2025-2030中国安全锤行业发展分析及投资风险与战略研究报告
- 基于区块链的智能合约优化-洞察阐释
- 医疗信息系统的用户反馈分析-洞察阐释
- 2025-2030中国婴儿训练尿布行业市场发展趋势与前景展望战略研究报告
- 2024年浙江首考高考英语卷试题真题及答案解析(含听力原文+作文范文)
- 交房通知短信(5篇)
- 高中英语 A precious family dinner说课课件
- 鼻部疾病 慢性鼻窦炎的诊疗
- 2013-2022全国高考真题物理汇编:练习使用多用电表
- GB/T 3197-2001焊条用铝及铝合金线材
- 《绿色建筑概论》整套教学课件
- 自动控制原理-复习题及答案
- SAP固定资产各种折旧方法配置及操作手册
- 产业发展理论-第七章-产业政策课件
- 奥数举一反三简单推理
评论
0/150
提交评论