Struts2学习笔记(4)-ActionSupport类及Action接口详解
来源:互联网 发布:label mx标签打印软件 编辑:程序博客网 时间:2024/06/06 01:01
一、ActionSupport类
com.opensymphony.xwork2.ActionSupport类时默认的动作类。 只要某个动作声明没有给出一个动作类,Struts就会替它创建一个这个类的实例。 在编写动作类时也需要对这个类进行扩展。 该类提供了许多默认方法。这些方法包括获取国际化信息的方法、数据校验的方法、默认的处理用户请求的方法等。。 如果让开发者的Action类继承该ActionSupport类,就会大大简化Action类的开发。
以下是ActionSupport类的源码:
package com.opensymphony.xwork2;import com.opensymphony.xwork2.inject.Container;import com.opensymphony.xwork2.inject.Inject;import com.opensymphony.xwork2.util.ValueStack;import com.opensymphony.xwork2.util.logging.Logger;import com.opensymphony.xwork2.util.logging.LoggerFactory;import java.io.Serializable;import java.util.Arrays;import java.util.Collection;import java.util.List;import java.util.Locale;import java.util.Map;import java.util.ResourceBundle;public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable { protected static Logger LOG = LoggerFactory.getLogger(ActionSupport.class); private final ValidationAwareSupport validationAware = new ValidationAwareSupport(); private transient TextProvider textProvider; private Container container; public void setActionErrors(Collection<String> errorMessages) { validationAware.setActionErrors(errorMessages); } public Collection<String> getActionErrors() { return validationAware.getActionErrors(); } public void setActionMessages(Collection<String> messages) { validationAware.setActionMessages(messages); } public Collection<String> getActionMessages() { return validationAware.getActionMessages(); } /** * @deprecated Use {@link #getActionErrors()}. */ @Deprecated public Collection<String> getErrorMessages() { return getActionErrors(); } /** * @deprecated Use {@link #getFieldErrors()}. */ @Deprecated public Map<String, List<String>> getErrors() { return getFieldErrors(); } /*设置表单域校验错误信息*/ public void setFieldErrors(Map<String, List<String>> errorMap) { validationAware.setFieldErrors(errorMap); } /*返回表单域错误校验信息*/ public Map<String, List<String>> getFieldErrors() { return validationAware.getFieldErrors(); } /*控制local的想关信息*/ public Locale getLocale() { ActionContext ctx = ActionContext.getContext(); if (ctx != null) { return ctx.getLocale(); } else { if (LOG.isDebugEnabled()) { LOG.debug("Action context not initialized"); } return null; } } public boolean hasKey(String key) { return getTextProvider().hasKey(key); } public String getText(String aTextName) { return getTextProvider().getText(aTextName); } /*返回国际化信息的方法*/ public String getText(String aTextName, String defaultValue) { return getTextProvider().getText(aTextName, defaultValue); } public String getText(String aTextName, String defaultValue, String obj) { return getTextProvider().getText(aTextName, defaultValue, obj); } public String getText(String aTextName, List<?> args) { return getTextProvider().getText(aTextName, args); } public String getText(String key, String[] args) { return getTextProvider().getText(key, args); } public String getText(String aTextName, String defaultValue, List<?> args) { return getTextProvider().getText(aTextName, defaultValue, args); } public String getText(String key, String defaultValue, String[] args) { return getTextProvider().getText(key, defaultValue, args); } public String getText(String key, String defaultValue, List<?> args, ValueStack stack) { return getTextProvider().getText(key, defaultValue, args, stack); } public String getText(String key, String defaultValue, String[] args, ValueStack stack) { return getTextProvider().getText(key, defaultValue, args, stack); } /** * Dedicated method to support I10N and conversion errors * * @param key message which contains formatting string * @param expr that should be formatted * @return formatted expr with format specified by key */ public String getFormatted(String key, String expr) { Map<String, Object> conversionErrors = ActionContext.getContext().getConversionErrors(); if (conversionErrors.containsKey(expr)) { String[] vals = (String[]) conversionErrors.get(expr); return vals[0]; } else { final ValueStack valueStack = ActionContext.getContext().getValueStack(); final Object val = valueStack.findValue(expr); return getText(key, Arrays.asList(val)); } } /*用于访问国际化资源包的方法*/ public ResourceBundle getTexts() { return getTextProvider().getTexts(); } public ResourceBundle getTexts(String aBundleName) { return getTextProvider().getTexts(aBundleName); } /*添加错误信息*/ public void addActionError(String anErrorMessage) { validationAware.addActionError(anErrorMessage); } public void addActionMessage(String aMessage) { validationAware.addActionMessage(aMessage); } /*添加校验字段的错误信息*/ public void addFieldError(String fieldName, String errorMessage) { validationAware.addFieldError(fieldName, errorMessage); } /*默认input方法,访问INPUT字符串*/ public String input() throws Exception { return INPUT; } /*默认处理用户请求的execute方法,直接返回SUCCESS字符串*/ public String execute() throws Exception { return SUCCESS; } public boolean hasActionErrors() { return validationAware.hasActionErrors(); } public boolean hasActionMessages() { return validationAware.hasActionMessages(); } public boolean hasErrors() { return validationAware.hasErrors(); } public boolean hasFieldErrors() { return validationAware.hasFieldErrors(); } public void clearFieldErrors() { validationAware.clearFieldErrors(); } public void clearActionErrors() { validationAware.clearActionErrors(); } public void clearMessages() { validationAware.clearMessages(); } public void clearErrors() { validationAware.clearErrors(); } /*清空错误信息的方法*/ public void clearErrorsAndMessages() { validationAware.clearErrorsAndMessages(); } /*空校验方法*/ public void validate() { } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } public void pause(String result) { } private TextProvider getTextProvider() { if (textProvider == null) { TextProviderFactory tpf = new TextProviderFactory(); if (container != null) { container.inject(tpf); } textProvider = tpf.createInstance(getClass(), this); } return textProvider; } @Inject public void setContainer(Container container) { this.container = container; }}
ActionSupport类中除execute方法以外,还有许多其它方法提供给程序员使用。eg:如果想用自己的代码对用户输入进行验证,你需要覆盖validate方法;如果想从属性文件里提取本地化的消息,可以选用getText方法的众多重载形式中的一种。
二、Action接口
为了让用户开发的Action类更加规范,Struts2提供了一个Action接口,这个接口定义了Struts2的Action处理类应该实现的规范。下面是标准Action接口的代码:
package com.opensymphony.xwork2;public interface Action { public static final String SUCCESS = "success"; public static final String NONE = "none"; public static final String ERROR = "error"; public static final String INPUT = "input"; public static final String LOGIN = "login"; /*定义处理用户请求的execute方法*/ public String execute() throws Exception;}
该接口只定义了一个用于处理用户请求的execute方法和5个静态字段。execute方法必须返回一个字符串。5个静态字段的作用是统一该方法的返回值;
补充:
如果想自己动手实现Action接口,而不是对ActionSupport类进行扩展,就必须自己提供一个execute方法的实现; 一般来说,对ActionSupport类进行扩展要比自行实现Action接口简单的多。 也即,对ActionSupport类进行扩展有助于编写动作类。
阅读全文
0 0
- Struts2学习笔记(4)-ActionSupport类及Action接口详解
- Struts2 Action接口与ActionSupport类
- Struts2(3):Action接口和ActionSupport基类
- Action接口与ActionSupport类
- Struts2学习总结(三):Action与ActionSupport
- struts2中的Action接口和Actionsupport接口的作用
- Struts2中的Action类与ActionSupport类
- Struts2中的Action类与ActionSupport类
- Struts2中的Action类与ActionSupport类
- J2EE系列之Struts2学习笔记(三)---引入ActionSupport类
- Struts2继承ActionSupport接口
- Struts2学习笔记(4)——struts2的Action详解
- Struts2中Action和ActionSupport
- Struts2中的Action和ActionSupport
- Action接口和ActionSupport基类
- Struts2的数据校验(Action类必须要继承ActionSupport类)
- struts2的ActionSupport接口分析
- 工作笔记:ActionSupport详解
- 文本相似度-词袋模型
- Sublime Text 3 快捷键总结
- 布局
- struts2 搭建环境后出现 no action mapped for namespace 的解决方法
- 浅谈Java中的equals和==
- Struts2学习笔记(4)-ActionSupport类及Action接口详解
- Word2003入门动画教程46:用“碎片”复制或移动文章
- 一篇讲组播MAC和各类IP地址的文章
- 并发编程工具之三:Semaphore 用法及源码分析
- BASE理论。
- python上传字符和二进制的文件到PHP服务器
- 通信网络
- 11月23日
- 深度学习21天实战实战caffe学习笔记<19>