您的位置:首页 > 编程语言 > Java开发

struts2系列学习笔记(4)---------------Action的多样化配置之一

2011-01-19 07:30 525 查看
一. Action的作用和意义

对于Struts2框架来说,Action作为其业务控制器,是应用的核心.开发者需要完成的是Action类的编写和配置.

二. Action的分类和配置

分类:

1. 最基本的Action类

2.继承自框架提供的类或接口的Action类

1) 继承自Action接口

2)继承自ActionSupport类

3.包含多个控制器方法的Action类

1)通过uri来指定具体执行的方法

2)通过配置文件指定执行的方法

3)使用通配符

4.默认的Action类

================================================================

1. 最基本的Action类

编写最基本的Action类需关注2部分内容编写: 一.属性及其对应的get和set方法; 二.execute方法的编写

一.属性及其对应的get和set方法

哪些内容应作为属性呢? 其一是用于封装请求参数(直白点就是属性对应form表单中各表单域),其二是用于输出结果(即在结果页面中显示的内容也可以通过属性进行传递,当然有些人不习惯这样做也可以通过其它方式实现.)

二.execute()方法的编写需要注意哪些?

1)方法签名:public String execute(){}

1)方法的返回值:必须对应有效的<result>标签的name属性值,在方法中以String类型返回

2)方法体的编写:

方法体中如何访问Servlet API?

前置条件:Struts2框架为了进一步解耦,Action类已经成为一个普通的java类,因此在Action中无法直接调用Servlet API,Struts2框架提供了自己的方式来间接访问Servlet API,关键类ActionContext

具体应用:

ActionContext context = ActionContext.getContext();

//模拟:request.setAttribute("attributeName","value");

Map request =(Map)context.get("request");

request.put("attributeName","value");

//模拟:session.setAttribute("attributeName","value");

Map session=context.getSession();

session.put("attributeName","value");

//模拟:application.setAttribute("attributeName","value");

Map application=context.getApplication();

application.put("attributeName","value");

在struts.xml文件中配置Action类

action元素的属性

属性是否必需说明
nameaction的名字,用于匹配请求URI
classAction实现类的完整类名
method执行Action时调用的方法
converter应用于action的类型转换器的完整类名
result元素的属性

属性是否必需说明
name指定result的逻辑名
type指定result的类型,不同类型的result代表了不同类型结果输出
================================================================

2.继承自框架提供的类或接口的Action类

1) 继承自Action接口

Action接口都定义了什么?

public interface Action{

public static String SUCCESS ="success";

public static String NONE="none";

public static String ERROR="error";

public static String INPUT="input";

public static String LOGIN="login";

public String execute()throws Exception;

}

编写的Action类继承Action接口的优势?

(1)接口中定义了5个常量,用于execute方法的返回值,可以起到规范代码的作用

(2)接口中预先定义好了execute方法,防止编写时方法签名出错.

2)继承自ActionSupport类

ActionSupport类实现了Action接口和Validatable等接口,因此继承该类与继承Action接口相比功能更加强大,而且编码更加简单.该类是Struts2默认的Action处理类,即配置文件<action>没有指定class属性时,默认值为ActionSupport类

public class ActionSupport implementsAction, LocaleProvider, TextProvider, Validateable, ValidationAware, Serializable

{

//添加错误信息

public void addActionError(String anErrorMessage) {}

//添加一般信息

public void addActionMessage(String aMessage)

//添加字段校验失败的错误信息

public void addFieldError(String fieldName, String errorMessage)

//清除Action的错误信息

public void clearActionErrors()

//清除所有的错误信息

public void clearErrors()

//清除所有的错误信息和普通文本信息

public void clearErrorsAndMessages()

//清除字段校验错误信息

public void clearFieldErrors()

//清除文本信息

public void clearMessages()

//方法的实现,该方法仅返回"success",除此之外什么都没做

public String execute()

//获取提供的Locale对象

public Locale getLocale()

//用于在实现类中(通常是在action中)访问国际化资源包

public ResourceBundle getTexts()

//通过名字返回国际化资源包

public ResourceBundle getTexts(String aBundleName)

//包含空的输入校验方法

public void validate()

//默认的input方法,直接返回INPUT

public String input()

//检查信息是否存在

public boolean hasActionErrors()

public boolean hasActionMessages()

public boolean hasErrors()

public boolean hasFieldErrors()

public boolean hasKey(String key)

//获取信息

public Collection<String> getActionErrors()

public Collection<String> getActionMessages()

public Map<String,List<String>> getFieldErrors()

// 过时的方法,替代方法 getActionErrors().

public Collection<String> getErrorMessages()

//过时的方法,替代方法 getFieldErrors().

public Map<String,List<String>> getErrors()

//设置信息

public void setActionErrors(Collection<String> errorMessages)

public void setActionMessages(Collection<String> messages)

public void setFieldErrors(Map<String,List<String>> errorMap)

//返回国际化信息的方法

public String getText(String aTextName)

public String getText(String aTextName, List<Object> args)

public String getText(String aTextName, String defaultValue)

public String getText(String key, String[] args)

public String getText(String aTextName, String defaultValue, List<Object> args)

public String getText(String key, String defaultValue, List<Object> args, ValueStack stack)

public String getText(String aTextName, String defaultValue, String obj)

public String getText(String key, String defaultValue, String[] args)

public String getText(String key, String defaultValue, String[] args, ValueStack stack)

public void pause(String result)

public Object clone()

public String doDefault()

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: