(4)Struts2之Action

本文详细介绍了Struts2框架中的核心组件Action,包括其角色、实现方式、执行流程及数据交互方法等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



1、Action是用来处理一次用户请求的对象

2、Action在MVC中到底充当什么角色呢?答案是模型,原因在于Struts2在运行过程中,关于Action的调用是通过FilterDispacher的,此时Action只是处于被调用而已。

3、关于Action的实现。

        a、通过POJO实现。

                   只是通过一个简单的java类即可,并不需要继承某个类或者某个接口,但对于execute方法要求如下:

public String execute() throws Exception {
      ...
}
//1、关于execute方法要求访问权限是public
//2、无参
//3、返回值为字符串
//4、抛出Exception为可选

    

       b、实现Action接口。

                    通过实现Action接口

import com.opensymphony.xwork2.Action;//此处导入的Action接口一定要是xwork2下的。
public class SomeAction implements  Action {
    

        public String execute() throws Exception {
             ...
        }

}



         c、继承ActionSupport类

                    通过继承ActionSupport类。

import com.opensymphony.xwork2.ActionSupport;

public class SomeAction extends ActionSupport{
    

        public String execute() throws Exception {
             ...
        }

}

//1、ActionSupport类实现了Action接口。
//2、ActionSupport除了实现Action接口外还实现了Validateable(验证功能,通过validate()方法)、Validateaware(保存或恢复action或field级的错误信息)、
//TextProvider(获取本地信息文本的功能)、LocaleProvider(提供getLocal()方法来获取本地信息)



 

        d、实际开发中由于ActionSupport实现了多个功能接口,所以建议使用继承ActionSupport方式。

4、execute()方法通常要完成一下工作:

        a、搜集用户传过来的数据。

        b、把搜集到的数据组织成逻辑层需要的格式。

        c、调用逻辑层接口,进行处理。

        d、准备下一个页面所需要的数据,并存在适当的地方。

        e、转下一个页面。

5、基本数据对应方式(即请求页面和被请求的Action之间数据的传递)

       a、使用属性驱动(基本数据类型):

               请求页面中input标签的name属性要和被请求的Action中的属性名称一样。如果Action中的属性是private的,则要提供相对应的getter/setter方法。

       b、使用属性驱动(直接使用域对象):

              请求页面中input标签的name属性是某域对象的属性名如obj.xxx,同时要在Action中创建对应的域模型对象如SomeObj obj = new SomeObj();,并且要提供对应的

              getter/setter方法。

       c、模型驱动(ModelDriven):

               它的基本实现方式是让Action实现一个接口ModelDriven,并实现该接口的getModel()方法,这个方法返回的就是Action所使用的数据模型对象,该方式只能使用一个 Model

SomeAction.java:
import ....
public class SomeAction extends ActionSupport implements ModelDriven {
     private SomeObj obj = new SomeObj();//注意,此时不再需要提供该对象的getter/setter方法了。
     public Object getModel() {
        return obj;
     }

     ......
}//在请求页面中input中name属性值和所请求的Action对象中的属性对应即可,此时不必再加前缀。


             

6、如果请求页面中有checkbox控件,这样的控件会传入多个值,可以在用数组或集合。

7、通配符。

<action name="*_*" class="com.consion.demo.action.{1}Action" method="{2}Method">
       <result name="welcome">/page/welcome.jsp</result>
</action>



以上的"*"代表长度不为0的任意字符 ,比如访问的是Some_add.action,则对应的Action是SomeAction,方法是addMethod()。

8、配置Action,如果class属性为空,则默认是ActionSupport类,该类中的execute()方法默认返回”success“,如果某个页面放置在WEB_INF中,则可以通过下面配置,其中result默认name="success"

<action name="someAction">
    <result>/WEB_INF/page/jsp/some.jsp</result>
</action>



9、在Struts2中,每次web请求都会新建一个实例。

10、调用非execute()方法,可以通过在请求URL使用!,如/demo/someAction!someMethod.action,其中someMethod是someAction中的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值