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

一. 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() 

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值