今天看啥
热点:

Struts2中Action的数据如何获取的


引言

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

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

基本的数据对应方式

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

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

(1)属性驱动(基本数据类型的属性对应)
就是我们需要建立一个与request域中对应的Java类,并要有get、set方法。
例如:登录表单如下

 

那么我们就需要写一个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 ;
    }
}

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

 

(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)中的那种点的形式了,也要进行相应的改变,具体如下:

 

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

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

传入非String类型的值

我们知道在实际的情况中并非传入的都是String类型的,好在Struts2能帮助用户自动完成基本类型的转换。
这里不是很难理解,不做说明。

如何处理传入多个值

比如我们注册的时候,需要填写用户的爱好,有一个checkbox会有多个值,我们怎么处理?
有两种方法:定义一个String类型的数组,提供get、set方法即可;另外就是定义一个私有的集合类型的属性,提供相应的get和set方法即可。

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

www.bkjia.comtruehttp://www.bkjia.com/Javabc/1003422.htmlTechArticleStruts2中Action的数据如何获取的 引言 我们在使用struts2的时候,发现只要实现一个和 用户表单相对应的Action那么我们就可以在execute()方法...

相关文章

相关搜索: 数据

帮客评论

视觉看点