Struts2学习笔记(二)——请求参数的接收

   接收参数的三种方法

 

一.通过action的属性接收参数

public class UserAction extends ActionSupport {
	private String name;
	private int age;
	public String add() {
		System.out.println("name=" + name);
		System.out.println("age=" + age);
		return SUCCESS;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

 我们在action中设置与请求参数同名的属性,核心控制器会主动调用该action相应的setXXX进行相关设置请求的路径类似于.../servletContextPath/namespace/user?name=aaa&age=5


二.通过Domain Model接收参数

public class User {
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
 public class UserAction extends ActionSupport {
	private User user;
	private String nickname;
	public String add() {
		System.out.println("name=" + user.getName());
		System.out.println("age=" + user.getAge());
                System.out.println("nickname=" + nickname);
		return SUCCESS;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
        public void setNickname(String nickname){
                this.nickname = nickname;
        }
        public String getNickname(){
                return nickname;
        }
}
 

我们先看与之相关的请求页面的格式.../servletContextPath/namespace/user?user.name=aaa&user.age&nickname
与第一种方法不同的是,我们在action中直接使用了User对象,在查询字符串中是以user.name这种形式给出域模型(Domain Model)User的属性值。核心控制器检查到这种形式也会创建action并对齐属性进行响应的设置。


三.通过Model Driver接收参数

public class User {
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
public class UserAction extends ActionSupport implements ModelDriven<user>{
	private User user = new User();
	public String add() {
		System.out.println("name=" + user.getName());
		System.out.println("age=" + user.getAge());
		return SUCCESS;
	}
	@Override
	public User getModel() {
		return user;
	}
}
 

 访问格式:.../servletContextPath/namespace/user?name=aaa&age=5,我们看到这种形式与第一种形式是一样的。
注意到他的两个重要操作:1.action类对ModelDriven<?>的实现,这里需要指定它的泛型类型2.在重写的方法中返回需要进行设置的user对象,在User类中写好setXXX和getXXX方法
核心控制器的操作流程大致是:1.创建action业务控制器2.通过getModel()得到user对象3.调用user的setXXX方法设置其属性值.
值得一提的是,核心控制器不会再创建User对象,因此我们必须在action中创建,如上user=new User();

猜你喜欢

转载自yyzjava.iteye.com/blog/1273266