Struts2实现接口和继承ActionSupport基类(转)

本文介绍 Struts2 中 Action 接口的作用及其默认实现类 ActionSupport 的功能特性,包括国际化信息获取、数据校验及默认处理请求的方法。

为了让用户开发的Action类更加规范,Struts2提供了一个Action接口,这个接口定义了Struts2的Action处理类应该实现的规范。下面是标准Action接口的代码:

[java]  view plain  copy
 
  1. package ppp;  
  2.   
  3. public interface Action {  
  4.   
  5.     //定义Action接口里包含的一些结果字符串  
  6.     public static final String ERROR = "error";  
  7.     public static final String INPUT = "input";  
  8.     public static final String LOGIN = "login";  
  9.     public static final String NONE = "none";  
  10.     public static final String SUCCESS = "success";  
  11.       
  12.     //定义处理用户请求的execute()方法  
  13.     public String execute() throws Exception;  
  14. }  


        上面的Action接口里只定义了一个execute()方法,该接口规范规定了Action类应该包含一个execute()方法,该方法返回一个字符串,此外,该接口还定义了5个字符串常量,他的作用是统一execute()方法的返回值。

        例如,当Action类处理用户处理成功后,有人喜欢返回welcome字符串,有人喜欢返回success字符串,如此不利于项目的统一管理,Struts2的Action接口定义加上了如上的5个字符串常量:ERROR,NONE,INPUT,LOGIN,SUCCESS等,分别代表了特定的含义。当然,如果开发者依然希望使用特定的字符串作为逻辑视图名,开发者依然可以返回自己的视图名。

        另外,Struts2还为Action接口提供了一个实现类:ActionSupport,下面是该实现类的代码:

 

[java]  view plain  copy
 
  1. package com.opensymphony.xwork2;  
  2. import com.opensymphony.xwork2.inject.Container;  
  3. import com.opensymphony.xwork2.inject.Inject;  
  4. import com.opensymphony.xwork2.util.ValueStack;  
  5. import com.opensymphony.xwork2.util.logging.Logger;  
  6. import com.opensymphony.xwork2.util.logging.LoggerFactory;  
  7. import java.io.Serializable;  
  8. import java.util.Collection;  
  9. import java.util.List;  
  10. import java.util.Locale;  
  11. import java.util.Map;  
  12. import java.util.ResourceBundle;  
  13.   
  14. /** 
  15. * Provides a default implementation for the most common actions. 
  16. * See the documentation for all the interfaces this class implements for more detailed information. 
  17. */  
  18. public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable {  
  19. protected static Logger LOG = LoggerFactory.getLogger(ActionSupport.class);  
  20. private final ValidationAwareSupport validationAware = new ValidationAwareSupport();  
  21. private transient TextProvider textProvider;  
  22. private Container container;  
  23.   
  24. public void setActionErrors(Collection<String> errorMessages) {  
  25. validationAware.setActionErrors(errorMessages);  
  26. }  
  27. public Collection<String> getActionErrors() {  
  28. return validationAware.getActionErrors();  
  29. }  
  30. public void setActionMessages(Collection<String> messages) {  
  31. validationAware.setActionMessages(messages);  
  32. }  
  33. public Collection<String> getActionMessages() {  
  34. return validationAware.getActionMessages();  
  35. }  
  36. /** 
  37. * @deprecated Use {@link #getActionErrors()}. 
  38. */  
  39. @Deprecated  
  40. public Collection<String> getErrorMessages() {  
  41. return getActionErrors();  
  42. }  
  43. /** 
  44. * @deprecated Use {@link #getFieldErrors()}. 
  45. */  
  46. @Deprecated  
  47. public Map<String, List<String>> getErrors() {  
  48. return getFieldErrors();  
  49. }  
  50. //设置表单域校验错误信息  
  51. public void setFieldErrors(Map<String, List<String>> errorMap) {  
  52. validationAware.setFieldErrors(errorMap);  
  53. }  
  54. //返回表单域错误校验信息  
  55. public Map<String, List<String>> getFieldErrors() {  
  56. return validationAware.getFieldErrors();  
  57. }  
  58. //控制locale的相关信息  
  59. public Locale getLocale() {  
  60. ActionContext ctx = ActionContext.getContext();  
  61. if (ctx != null) {  
  62. return ctx.getLocale();  
  63. else {  
  64. LOG.debug("Action context not initialized");  
  65. return null;  
  66. }  
  67. }  
  68. public boolean hasKey(String key) {  
  69. return getTextProvider().hasKey(key);  
  70. }  
  71. public String getText(String aTextName) {  
  72. return getTextProvider().getText(aTextName);  
  73. }  
  74. //返回国际化信息的方法  
  75. public String getText(String aTextName, String defaultValue) {  
  76. return getTextProvider().getText(aTextName, defaultValue);  
  77. }  
  78. public String getText(String aTextName, String defaultValue, String obj) {  
  79. return getTextProvider().getText(aTextName, defaultValue, obj);  
  80. }  
  81. public String getText(String aTextName, List<Object> args) {  
  82. return getTextProvider().getText(aTextName, args);  
  83. }  
  84. public String getText(String key, String[] args) {  
  85. return getTextProvider().getText(key, args);  
  86. }  
  87. public String getText(String aTextName, String defaultValue, List<Object> args) {  
  88. return getTextProvider().getText(aTextName, defaultValue, args);  
  89. }  
  90. public String getText(String key, String defaultValue, String[] args) {  
  91. return getTextProvider().getText(key, defaultValue, args);  
  92. }  
  93. public String getText(String key, String defaultValue, List<Object> args, ValueStack stack) {  
  94. return getTextProvider().getText(key, defaultValue, args, stack);  
  95. }  
  96. public String getText(String key, String defaultValue, String[] args, ValueStack stack) {  
  97. return getTextProvider().getText(key, defaultValue, args, stack);  
  98. }  
  99. //用于访问国际化资源包的方法  
  100. public ResourceBundle getTexts() {  
  101. return getTextProvider().getTexts();  
  102. }  
  103. public ResourceBundle getTexts(String aBundleName) {  
  104. return getTextProvider().getTexts(aBundleName);  
  105. }  
  106. //添加错误信息  
  107. public void addActionError(String anErrorMessage) {  
  108. validationAware.addActionError(anErrorMessage);  
  109. }  
  110. public void addActionMessage(String aMessage) {  
  111. validationAware.addActionMessage(aMessage);  
  112. }  
  113. 添加字段校验的错误信息  
  114. public void addFieldError(String fieldName, String errorMessage) {  
  115. validationAware.addFieldError(fieldName, errorMessage);  
  116. }  
  117. //默认Input方法,直接访问input字符串  
  118. public String input() throws Exception {  
  119. return INPUT;  
  120. }  
  121. public String doDefault() throws Exception {  
  122. return SUCCESS;  
  123. }  
  124. /** 
  125. * A default implementation that does nothing an returns "success". 
  126. * <p/> 
  127. * Subclasses should override this method to provide their business logic. 
  128. * <p/> 
  129. * See also {@link com.opensymphony.xwork2.Action#execute()}. 
  130. * @return returns {@link #SUCCESS} 
  131. * @throws Exception can be thrown by subclasses. 
  132. */  
  133. //默认处理用户请求的方法,直接返回SUCCESS字符串  
  134. public String execute() throws Exception {  
  135. return SUCCESS;  
  136. }  
  137. public boolean hasActionErrors() {  
  138. return validationAware.hasActionErrors();  
  139. }  
  140. public boolean hasActionMessages() {  
  141. return validationAware.hasActionMessages();  
  142. }  
  143. public boolean hasErrors() {  
  144. return validationAware.hasErrors();  
  145. }  
  146. public boolean hasFieldErrors() {  
  147. return validationAware.hasFieldErrors();  
  148. }  
  149. /** 
  150. * Clears field errors. Useful for Continuations and other situations 
  151. * where you might want to clear parts of the state on the same action. 
  152. */  
  153. public void clearFieldErrors() {  
  154. validationAware.clearFieldErrors();  
  155. }  
  156. /** 
  157. * Clears action errors. Useful for Continuations and other situations 
  158. * where you might want to clear parts of the state on the same action. 
  159. */  
  160. public void clearActionErrors() {  
  161. validationAware.clearActionErrors();  
  162. }  
  163. /** 
  164. * Clears messages. Useful for Continuations and other situations 
  165. * where you might want to clear parts of the state on the same action. 
  166. */  
  167. public void clearMessages() {  
  168. validationAware.clearMessages();  
  169. }  
  170. /** 
  171. * Clears all errors. Useful for Continuations and other situations 
  172. * where you might want to clear parts of the state on the same action. 
  173. */  
  174. public void clearErrors() {  
  175. validationAware.clearErrors();  
  176. }  
  177. /** 
  178. * Clears all errors and messages. Useful for Continuations and other situations 
  179. * where you might want to clear parts of the state on the same action. 
  180. */  
  181. //清理错误信息的方法  
  182. public void clearErrorsAndMessages() {  
  183. validationAware.clearErrorsAndMessages();  
  184. }  
  185. /** 
  186. * A default implementation that validates nothing. 
  187. * Subclasses should override this method to provide validations. 
  188. */  
  189. //包含空校验的方法  
  190. public void validate() {  
  191. }  
  192. @Override  
  193. public Object clone() throws CloneNotSupportedException {  
  194. return super.clone();  
  195. }  
  196. /** 
  197. * <!-- START SNIPPET: pause-method --> 
  198. * Stops the action invocation immediately (by throwing a PauseException) and causes the action invocation to return 
  199. * the specified result, such as {@link #SUCCESS}, {@link #INPUT}, etc. 
  200. * <p/> 
  201. * <p/> 
  202. * The next time this action is invoked (and using the same continuation ID), the method will resume immediately 
  203. * after where this method was called, with the entire call stack in the execute method restored. 
  204. * <p/> 
  205. * <p/> 
  206. * Note: this method can <b>only</b> be called within the {@link #execute()} method. 
  207. * <!-- END SNIPPET: pause-method --> 
  208. * @param result the result to return - the same type of return value in the {@link #execute()} method. 
  209. */  
  210. public void pause(String result) {  
  211. }  
  212. /** 
  213. * If called first time it will create {@link com.opensymphony.xwork2.TextProviderFactory}, 
  214. * inject dependency (if {@link com.opensymphony.xwork2.inject.Container} is accesible) into in, 
  215. * then will create new {@link com.opensymphony.xwork2.TextProvider} and store it in a field 
  216. * for future references and at the returns reference to that field 
  217. * @return reference to field with TextProvider 
  218. */  
  219. private TextProvider getTextProvider() {  
  220. if (textProvider == null) {  
  221. TextProviderFactory tpf = new TextProviderFactory();  
  222. if (container != null) {  
  223. container.inject(tpf);  
  224. }  
  225. textProvider = tpf.createInstance(getClass(), this);  
  226. }  
  227. return textProvider;  
  228. }  
  229. @Inject  
  230. public void setContainer(Container container) {  
  231. this.container = container;  
  232. }  
  233. }  

        正如上面代码中的,ActionSupport是一个默认的Action实现类,该类里已经提供了许多默认方法,这些方法包括获取国际化信息的方法、数据校验的方法、默认的处理用户请求的方法等,实际上,ActionSupport是Struts2的默认的Action处理类,如果让开发者的Action类继承该ActionSupport类,则会大大简化Action的开发。

转载于:https://www.cnblogs.com/AnswerTheQuestion/p/6542713.html

代码转载自:https://pan.quark.cn/s/46fd08fb879c 网管教程 从入门到精通软件篇 ★一。★详尽的xp修复控制台指令及其应用!!! 放入xp(2000)的光盘,安装时选择R,执行修复! Windows XP(涵盖 Windows 2000)的控制台指令是在系统遭遇某些意外状况时的一种极具效用的诊断、检测以及恢复系统功能的工具。笔者确实一直期望能够将这方面的指令进行归纳,此次由老范辛苦整理了这份极具价值的秘籍。 Bootcfg bootcfg 命令用于启动配置与故障恢复(对大多数计算机而言,即 boot.ini 文件)。 带有特定参数的 bootcfg 命令仅在运用故障恢复控制台时方可使用。能够在命令行界面下运用带有不同参数的 bootcfg 命令。 用法: bootcfg /default 设定默认引导选项。 bootcfg /add 向引导清单中增添 Windows 安装。 bootcfg /rebuild 重复整个 Windows 安装流程并让用户选择需添加的项目。 注意:运用 bootcfg /rebuild 之前,应先借助 bootcfg /copy 命令备份 boot.ini 文件。 bootcfg /scan 探查用于 Windows 安装的全部磁盘并展示结果。 注意:这些结果被静态存储,并用于当前会话。若在当前会话期间磁盘配置发生变动,为获取更新的探查结果,必须先重启计算机,然后再次探查磁盘。 bootcfg /list 列示引导清单中已有的项目。 bootcfg /disableredirect 在启动引导程序中禁用重定向。 bootcfg /redirect [ PortBaudRrate] |[ useBio...
代码下载链接: https://pan.quark.cn/s/fc524f791b68 AA制程,即Active Alignment,被理解为主动对准,是一种用于确定零部件装配中相对位置的方法。在摄像头封装阶段,涉及图像传感器、镜座、马达、镜头、线路板等多个部件的重复组装,而传统的封装设备如CSP及COB等,均是依据设备设定的参数进行零部件的移动装配,因而零部件的叠加误差会逐渐增大,最终在摄像头上表现为拍照最清晰的位置可能偏离画面中心、四边清晰度不均等现象。伴随智能手机和其他高端电子产品的普及,摄像头模组的性能正日益受到重视。高分辨率、卓越的低光表现以及稳定视频输出是现代用户所期望的。在摄像头模组的制造环节,各部件的精准定位对成像质量具有决定性作用。因此,一种名为“AA制程”(Active Alignment)的前沿技术被开发出来,成为摄像头精密对准的核心技术。 AA制程,即Active Alignment,是一种在摄像头封装过程中应用的主动对准方法。该方法在多个组件装配阶段发挥作用,涵盖图像传感器、镜座、马达、镜头和线路板等部件。传统的封装方式,例如CSP(Chip Scale Package)和COB(Chip On Board),依赖于设备预设的参数进行组装,但随着组件数量的增加,误差也会累积,最终影响摄像头的表现。例如在成像质量上可能出现中心位置偏移、四角清晰度不一致等问题。 AA制程技术的核心在于实时监测与主动调整。在组装过程中,它借助先进的检测设备持续监控半成品的状态,并根据实时信息对组装部件进行精确修正,从而显著降低装配误差。通过这种技术,能够确保摄像头模组中各组件的相对位置准确无误,从而使得最终的成像效果更加稳定,特别是在中心区域和四角的清晰度上...
内容概要:本文介绍了一套基于Matlab实现的光子晶体90度弯曲波导的二维时域有限差分法(2D FDTD)仿真代码,旨在通过数值模拟手段深入研究光子晶体波导中的光传播特性。该资源聚焦于电磁场与光子学领域的仿真技术应用,系统实现了FDTD算法在复杂介质结构中的建模过程,涵盖空间网格剖分、时间步进迭代、完美匹配层(UPML)边界条件处理、总场散射场(TFSF)激励源设置、介电常数分布定义及电磁场演化可视化等核心模块,能够有效分析光在90度弯曲波导中的传输效率、模式分布与反射损耗等关键性能指标。; 适合人群:具备电磁场理论基础和Matlab编程能力的研究生、科研人员以及从事光子晶体器件设计与仿真的工程技术人员。; 使用场景及目标:①用于教学演示FDTD方法的基本原理与算法流程,帮助理解麦克斯韦方程的离散化求解过程;②支撑科研工作中对光子晶体弯曲波导结构的传输特性进行仿真分析与性能优化;③作为开发更复杂光子集成器件(如分束器、滤波器)数值仿真工具的基础框架; 阅读建议:建议使用者结合经典FDTD教材(如Taflove著作)深入理解算法理论,并在Matlab环境中逐模块调试代码,重点关注电场与磁场的交替更新过程、UPML吸收边界的设计实现以及TFSF源的引入方式,从而全面提升对时域电磁仿真机制的掌握与应用能力。
内容概要:本文围绕直驱式永磁同步电机(PMSM)的矢量控制仿真模型展开研究,基于Simulink平台构建了完整的电机控制系统仿真模型,涵盖电机本体建模、坐标变换(如Clark变换与Park变换)、磁场定向控制(FOC)、电流环与速度环的PI调节、空间矢量脉宽调制(SVPWM)等核心技术环节,旨在实现对电机转矩与转速的高精度、动态响应良好的控制。通过系统化仿真验证控制策略的有效性与鲁棒性,深入分析各模块间的信号流向与控制逻辑,为电机驱动系统的设计与优化提供理论依据和技术支撑,是理论联系工程实践的重要桥梁。; 适合人群:具备电机学、电力电子与自动控制基础知识,熟悉Simulink/MATLAB仿真环境,从事电气工程、自动化、新能源车辆、智能制造等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解永磁同步电机矢量控制的核心原理与系统架构;②掌握在Simulink中从零开始搭建复杂电机控制系统的方法与技巧;③应用于课程设计、毕业论文、科研项目中的控制算法验证、参数整定与性能优化;④为后续的硬件在环(HIL)测试或实物系统开发奠定仿真基础。; 阅读建议:建议结合经典电机控制理论教材同步学习,注重理论推导与仿真实现的对应关系,动手实践模型搭建、参数调试与波形分析,特别关注PI控制器参数整定对系统稳定性、动态响应速度和抗干扰能力的影响,通过反复仿真迭代加深对控制机理的理解。
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 Subversion,即 SVN,是一种在软件开发行业中普遍应用的版本管理工具。它支持团队成员之间的协作,用于管理和监控项目文件的历史版本,并保证多人同时编辑时的数据一致性。本指南将深入讲解 SVN 的核心概念、主要目录的权限设置、用户身份验证方式以及基础操作步骤,是初学者入门的理想学习资料。 一、SVN概述 SVN的中心是版本库,它负责存储所有文件和目录,并构建成文件树的结构。版本库能够允许多个客户端进行连接,执行数据的读取或写入。用户可以通过写操作将自己的修改同步至版本库,而其他用户则可以通过读操作来查看这些变更。这种集中式的版本管理机制使团队协作更加高效和有序。 二、SVN的访问权限配置 在 SVN 系统中,不同的用户或用户团队会被分配不同的访问权限。以质量管理部门的 SVN 实例为例: - 主管朱猛、张凯峰、吕鑫、张颂、马凌具备读写权限。 - 员工陈玲及其他成员仅拥有读权限。 - 项毓毅享有读写权限,主管团队则只有读权限。 - 张凯峰同样拥有读写权限,而其他同事仅能进行读取操作。 三、登录凭证 用户在访问 SVN 时,需要使用基于姓名拼音的用户名和符合特定规则的密码。例如,用户张三的登录名设定为"zhangs",密码为"zhangs#123",这样的设置旨在简化记忆和管理工作。 四、基础操作指南 1. 安装 SVN 客户端:本教程推荐采用 TortoiseSVN 进行安装,可以从指定的 FTP 地址获取安装包。 2. 读取操作: - 项毓毅和管理团队可以直接检出到"质量管理部"目录。 - 其他员工需要分别检出到"部门财富库"和"产品线管理"子目录,因为他们无法访问"部...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值