接收页面传来的参数方法java
一、第一种:在action中设置相应的变量 session
在相应的action中设置与将要传进来的参数名相同的变量 dom
eg: 页面传给后台两个参数 name=chance & age = 1,ide
那么后台的action中 要设定这样的变量:private String name; private int age;同时,必须设置setXXX()和 getXXX()方法this
那么在访问action过程当中,struts会自动的为action中的这两个变量设置前台传来的值 orm
二、第二种:DomainModule对象
domainmodule 中文解释:域模型接口
domainmodule接收参数的方式就是:在action中设一个module对象(即实体对象)rem
eg: 一个bbs系统,实现用户注册模块,咱们会相应的创建一个 User类get
分析下为何要用DomainModule来接收参数,咱们从页面向后台的action中传递参数,action作的处理无非是紧接着再把这个参数传递给对应的module,那么假如咱们的module有100个变量,那么咱们用第一种方法接收参数时就要在action中设置100个变量,但若是咱们用domainmodule的话就简单的多
eg:有一个用户登陆系统,前台须要向后台传递一个user的name 和 password 两个属性,
咱们能够这么处理,首先在相应的action中设一个实体对象private User user;(假如咱们已经有了User这个实体类了),
那么前台传递参数的时候能够这么来写 action?user.name=chance&user.password=123
注意:须要给user设置 set,get方法
下面咱们在来考虑一个问题,一般用户登陆的时候 除了用户名,密码,还会填写一个 确认密码(其实这个工做彻底能够交给客户端的js来处理,这里只是为了说明问题),可是在 User Module抽象封装的过程它是不会有 confimPassword这一项的,这样咱们就不能用domainModule来解决这个问题,怎么办?
解决方法就是引入 DTO(又叫 do,或vo)data transform object,它的工做就两点:接收一下,传递一下;
接收一下:前台传过来的user对象,咱们不直接传递给usermodule 而是传递给 dto对象,例如userDto(它里面会有一个confimPassword变量)
传递一下:dto接收来参数后 进过一番数据处理,确认密码输入正确那么就会 把 必要的参数变量传递给 usermodule
搞定!
第三种: ModuleDriven
这个不是很经常使用,可是这个思想很重要,直接贴上代码
较特殊,它是Struts2种独有的一种接收用户输入的机制,想在项目中使用模型驱动
(ModelDriven)须要让Action实现com.opensymphony.xwork2.ModelDriven 接口,使用它
的getModel()方法来通知Struts2要注入的属性类型,而且声明属性时必定要实例化,但不需get,
set方法(这是与第二种方式的区别)。
public class UsersAction extends SuperAction implements ModelDriven<Users> {
/**
*
*/
private static final long serialVersionUID = 1L;
private Users user = new Users();
public String login() {
UsersDAO udao = new UsersDAOImpl();
if (udao.usersLogin(user)) {
// 在session中保存登陆成功的用户名
session.setAttribute("loginUserName", user.getUsername());
return "login_success";
} else {
return "login_failure";
}
}
// 用户注销方法
public String logout() {
if (session.getAttribute("loginUserName") != null) {
session.removeAttribute("loginUserName");
}
return "logout_success";
}
@Override
public Users getModel() {
// TODO Auto-generated method stub
return this.user;
}
}