Struts2中Action的数据如何获取的

引言

我们在使用struts2的时候,发现只要实现一个和 用户表单相对应的Action那么我们就可以在execute()方法中直接使用该请求的参数,存放在request域中的数据是谁帮我们完成了和Action中的对应哪?以及他们是如何对应的哪?

对于第一个问题大家都可能已经知道这位好人就是拦截器,我们的request域中存放的参数,已经由拦截器帮我们映射完毕了,那么下边就看一下是怎么映射的。

基本的数据对应方式

Struts2中提供了两种页面数据和Action对应的方式:属性驱动(FieldDriven)和模型驱动(ModelDriven);

属性驱动又分为两种:一种是基本数据类型的属性对应,另一种是JavaBean风格的属性对应。

(1)属性驱动(基本数据类型的属性对应)

就是我们需要建立一个与request域中对应的Java类,并要有get、set方法。

例如:登录表单如下

 <form action="helloworld/userAction.action" method="post">
        <input type="hidden" name="submitFlag" value="login" />
        用户名:<input type="text" name="account"><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="提交">
    </form>

那么我们就需要写一个Action和这个表单对应:

public class UserAction extends ActionSupport {

    private String submitFlag;
    private String account;
    private String password;
    //省去get和set方法
}

可以看出表单中的数据适合action相对应的,这样的话struts2会自动从request对象中把数据取出来,然后按照名称进行对应,自动设置到Action的属性里边去。

(2)属性驱动(直接使用域对象)

我们可以想到当我们表单中有很多数据的时候,那么我们的action中的数据会很多,不便于维护,这就是属性驱动的优势了,我们可以把这些属性封装到一个bean中然后再action中使用这个bean就可以了,具体如下:

表单和上一个相同:

bean中的参数和表单中相对应:

public class UserModel{
    private String submitFlag;
    private String account;
    private String password;
    //省去get和set方法
}

然后我们在action中使用的时候,就可以这样用了:

public class UserAction extends ActionSupport {
    private UserModel userModelTest = new UserModel(); //使用的是User的model,是和表单对应的
    public UserModel getUserModel() {
        return userModelTest ;
    }
    public void setUserModel(UserModel userModelTest ) {
        this.userModelTest = userModelTest ;
    }
}

这样的话我们的表单也要进行相应的改变,具体如下:

 <form action="helloworld/userAction.action" method="post">
        <input type="hidden" name="userModelTest.submitFlag" value="login" />
        用户名:<input type="text" name="userModelTest.account"><br>
        密码:<input type="password" name="userModelTest.password"><br>
        <input type="submit" value="提交">
    </form>

(3)模型驱动

这种方式就是让Action实现ModelDriven的接口,这个接口实现一个getModel的方法,这个方法返回的就是Action所使用的数据模型对象。

例如:表单中的参数和前边一样

public class UserAction extends ActionSupport implements ModelDriven{

    private UserModel userModelTest = new UserModel();
    public UserModel getUserModel() {
        return userModelTest;
    }
    public void setUserModel(UserModel userModelTest) {
        this.userModelTest = userModelTest;
    }
    public Object getModel() {
        return userModelTest;
    }
}

这样的话我们的表单就不需要(2)中的那种点的形式了,也要进行相应的改变,具体如下:

 <form action="helloworld/userAction.action" method="post">
        <input type="hidden" name="submitFlag" value="login" />
        用户名:<input type="text" name="account"><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="提交">
    </form>

那么为什么这里不需要我们点出来了那(更确切的是为什么我们不需要前缀了),这是因为使用ModelDriven的方式,一个Action只能对应一个Model,因此不需要添加前缀。

上边的三种方式的优缺点大家都可以直接看出来了,不在细说。另外三种方式都可以混合使用。

传入非String类型的值

我们知道在实际的情况中并非传入的都是String类型的,好在Struts2能帮助用户自动完成基本类型的转换。

这里不是很难理解,不做说明。

如何处理传入多个值

比如我们注册的时候,需要填写用户的爱好,有一个checkbox会有多个值,我们怎么处理?

有两种方法:定义一个String类型的数组,提供get、set方法即可;另外就是定义一个私有的集合类型的属性,提供相应的get和set方法即可。

另外如果传入的值得个数不确定我们只能使用集合来进行处理。

时间: 2024-11-05 15:40:42

Struts2中Action的数据如何获取的的相关文章

struts2中action手动获取參数

struts2中action手动获取Session,jsp页面參数 1. ActionContext 在Struts2开发中,除了将请求參数自己主动设置到Action的字段中,我们往往也须要在Action里直接获取请求(Request)或会话(Session)的一些信息, 甚至须要直接对JavaServlet Http的请求(HttpServletRequest),响应(HttpServletResponse)操作. 我们须要在Action中取得request请求參数"username"

关于Struts2中Action从表单取值并且存到Web元素中(session)

声明:本博客非原创,[转载:http://blog.csdn.net/Cece_2012/article/details/7617775] 在struts2中,Action不同于struts1.x中的Action.在struts2中Action并不需要继承任何控制器类型或实现相应接口.比如struts1.x中的Action需要继承Action或者DispatcherAction. 同时struts2中的Action并不需要借助于像struts1.x中的ActionForm获取表单的数据.可以直接

Struts2中Action取得表单数据的几种方法

Struts2中Action取得表单数据的几种方法 Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form action="sys/login.action" method="post"> <input type="text" name="username"> <input type="submit"

Struts2中Action接收参数的方法

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt112 Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属性,创建get和set方法:     b.接收:通过属性接收参数,如:userName:     c.发送:使用属性名传递参数,如:user1!add?userName=Magci: 2.使用DomainModel接收参数:   

Struts2中Action接收参数

Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属性,创建get和set方法:     b.接收:通过属性接收参数,如:userName:     c.发送:使用属性名传递参数,如:user1!add?userName=Magci: 2.使用DomainModel接收参数:     a.定义:定义Model类,在Action中定义Model类的对象

Struts2中Action接收参数的方法主要有以下三种:

Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数(最原始的方式):     a.定义:在Action类中定义属性,创建get和set方法:     b.接收:通过属性接收参数,如:userName:     c.发送:使用属性名传递参数,如:user1!add?userName=jim: 2.使用DomainModel接收参数:     a.定义:定义Model类,在Action中定义Model类的对象(不需要new),创建该对象的get和set方法

Struts2中Action接收参数的三种方式

Struts2中Action接收参数的方法主要有以下三种:1.使用Action的属性接收参数:    a.定义:在Action类中定义属性,创建get和set方法:    b.接收:通过属性接收参数,如:userName:    c.发送:使用属性名传递参数,如:user1!add?userName=zhangsan:2.使用DomainModel接收参数:    a.定义:定义Model类,在Action中定义Model类的对象(不需要new),创建该对象的get和set方法:    b.接收

Struts2中Action通配符的配置

1.在我的一篇文章中,介绍了Struts2中Action的动态调用方法:http://blog.csdn.net/u012561176/article/details/44347429 但是那样子还不是最简单的,最简单的是使用通配符,将配置量降到最低,但是这个也比较难已理解,在使用通配符时,一定要遵守"约定优于配置"的原则. 2.接下来介绍一下通配符,使用星号(*)表示所有,{数字}表示第几个通配符,例如: *Action,那么{1}就表示第一个星号(*),如果是 *_* 的话,那

5.struts2中Action类中获取ServletAPI的三种方式

**Servlet的API的访问(开发中偶尔会使用到)** 1.在Action类中也可以获取到Servlet一些常用的API,有如下三种方式获取 * 完全解耦合的方式 * 使用接口注入的方式 * 使用ServletActionContext中静态方法直接访问Servlet的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的页面上. * 提供JSP注册的页面,演示下面这三种方式: <h3>注册页面</