实现Action ——Action接口和ActionSupport基类
来源:互联网 发布:网络品牌推广方案 编辑:程序博客网 时间:2024/06/14 08:23
为了让用户开发的Action类更加规范,Struts2提供了一个Action接口,这个接口定义了Struts2的Action处理类应该实现的规范。下面是标准Action接口的代码:
- package ppp;
-
- public interface Action {
-
-
- public static final String ERROR = "error";
- public static final String INPUT = "input";
- public static final String LOGIN = "login";
- public static final String NONE = "none";
- public static final String SUCCESS = "success";
-
-
- public String execute() throws Exception;
- }
上面的Action接口里只定义了一个execute()方法,该接口规范规定了Action类应该包含一个execute()方法,该方法返回一个字符串,此外,该接口还定义了5个字符串常量,他的作用是统一execute()方法的返回值。
例如,当Action类处理用户处理成功后,有人喜欢返回welcome字符串,有人喜欢返回success字符串,如此不利于项目的统一管理,Struts2的Action接口定义加上了如上的5个字符串常量:ERROR,NONE,INPUT,LOGIN,SUCCESS等,分别代表了特定的含义。当然,如果开发者依然希望使用特定的字符串作为逻辑视图名,开发者依然可以返回自己的视图名。
另外,Struts2还为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.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
- public Collection<String> getErrorMessages() {
- return getActionErrors();
- }
-
-
-
- @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();
- }
-
- public Locale getLocale() {
- ActionContext ctx = ActionContext.getContext();
- if (ctx != null) {
- return ctx.getLocale();
- } else {
- 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<Object> 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<Object> 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<Object> 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);
- }
-
- 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);
- }
-
- public String input() throws Exception {
- return INPUT;
- }
- public String doDefault() throws Exception {
- return 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是一个默认的Action实现类,该类里已经提供了许多默认方法,这些方法包括获取国际化信息的方法、数据校验的方法、默认的处理用户请求的方法等,实际上,ActionSupport是Struts2的默认的Action处理类,如果让开发者的Action类继承该ActionSupport类,则会大大简化Action的开发。