Action接收页面传来的参数方法

时间:2024-01-08 22:28:26

接收页面传来的参数方法

1、第一种:在action中设置相应的变量  

  在相应的action中设置与将要传进来的参数名相同的变量

  eg: 页面传给后台两个参数 name=chance & age = 1,

那么后台的action中 要设定这样的变量:private String name; private int age;同时,必须设置setXXX()和 getXXX()方法

     那么在访问action过程中,struts会自动的为action中的这两个变量设置前台传来的值 

2、第二种:DomainModule

  domainmodule 中文解释:域模型

domainmodule接收参数的方式就是:在action中设一个module对象(即实体对象)

  eg: 一个bbs系统,实现用户注册模块,我们会相应的建立一个 User类

  分析下为什么要用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;
}

}