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 =”login” />用户名:<input type=”text” name=”account”><br>密码:<input type=”password” name=”password”><br><input =”提交”></form>

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

{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中使用的时候,就可以这样用了:

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

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

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

(3)模型驱动 这种方式就是让Action实现ModelDriven的接口,这个接口实现一个getModel的方法,这个方法返回的就是Action所使用的数据模型对象。 例如:表单中的参数和前边一样

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

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

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

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

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

传入非String类型的值

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

如何处理传入多个值

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

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

分明是比谁记的都清楚,比谁都更加在意,

Struts2中Action的数据如何获取的

相关文章:

你感兴趣的文章:

标签云: