这个例子主要是运用了DomainModule的方式进行的操作。
domainmodule 中文解释:域模型,domainmodul接收参数的方式就是,在action中设一个module对象(即实体对象,还不明白就看下面的举例)
例如,一个bbs系统,实现用户注册模块,那么后台module中 我们就会相应的建立一个 User类,这个user类就是我们前面说过的module,
分析下为什么要用DomainModule来接收参数,我们从前台向后台的action中传递参数,action做的处理无非是紧接着再把这个参数传递给对应的module,那么假如我们的module有100个变量(呵呵,我说的是假如),那么我们用第一种方法接收参数时就要在action中设置100个变量,但如果我们用domainmodule的话就简单的多,说了这么多,还没讲到怎么用呵呵,切入正题:
eg:有一个用户登录系统,前台需要向后台传递一个user的name 和 password 两个属性,
那么我们可以这么处理,首先在相应的action 设一个private User user; 变量(假如我们已经有了User这个Module了),好那么前台传递参数的时候可以这么来写,
action?user.name=chance&user.password=123
注意:我们依然需要继续给user设置 set get方法
另外需要注意的是,在action中设置的变量 无论是基本类型,还是引用类型,我们只需要声明,但不需要定义(简单的说,就是我们不需要去 new 一个变量)
new的过程 由struts来帮我们完成
下面我们在来考虑一个问题,还拿上面的用户登录系统来举例,通常用户登录的时候 除了用户名,密码,还会填写一个 确认密码(其实这个工作完全可以交给客户端的js来处理,这里只是为了说明问题),但是在 User Module抽象封装的过程它是不会有 confimPassword这一项的,这样我们就不能用domainModule来解决这个问题,怎么办?
解决方法就是引入 DTO(又交 do,或vo)data transform object,它的工作就两点:接收一下,传递一下;
接收一下:前台传过来的user对象,我们不直接传递给usermodule 而是传递给 dto对象,例如userDto(它里面会有一个confimPassword变量)
传递一下:dto接收来参数后 进过一番数据处理,确认密码输入正确那么就会 把 必要的参数变量传递给 usermodule 。
<form action="reg/register!reg" method="post" name="myform">
姓名:<input type="text" name="user.name"/><br/>
密码:<input type="password" name="user.password"/><br/>
性别:<input type="radio" name="user.sex" value="male">男<input type="radio" name="user.sex" value="fmale">女<br/>
邮箱:<input type="text" name="user.mail"><br/><br/>
<input type="reset"/> <input type="submit">
</form>
这一段,注意的是表单里的action,和name属性。
package cn.qin.Actions;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import cn.qin.Models.*;
public class registerAction extends ActionSupport {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String reg(){
System.out.println("system.out:"+"name"+user.getName()+"密码"+user.getPassword()+"性别"+user.getSex()+"邮箱"+user.getName());
return "success";
}
public User getModel() {
return user;
}
}
注意user的get方法
package cn.qin.Models;
public class User {
private String name;
private String password;
private String mail;
private String sex;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
user的属性,即
module。struts的配置如下
<constant name="struts.devMode" value="true" />
<package name="register" namespace="/reg" extends="struts-default">
<action name="register" class="cn.qin.Actions.registerAction" >
<result>/regSuccess.jsp</result>
</action>
</package>