struts2请求参数获取

struts2请求参数获取的三种方法
1、属性驱动

通过action的属性来获取参数,每个属性名和表单参数名相同,并有setter/getter方法,ognl自动填充。
此方法需要为每个表单定制action,并且要求表单的参数较少。

public class indexAction extends ActionSupport{
	private String account;
	private String passwd;
	public String getAccount() {
		return account;
	}
	public void setAccount(String account) {
		this.account = account;
	}
	public String getPasswd() {
		return passwd;
	}
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}
}

表单内容:

<form action="login-admin" method="post">
	<input type="text" name="account" placeholder="用户名"/><br/>
	<input type="text" name="passwd" placeholder="密码"/><br/>
	<input type="submit" value="登录">
form>
2、域值驱动

将方法和属性分离:创建JavaBean类封装参数,action中实例化JavaBean类对象获取参数,表单中也通过类进行表单项name的定义。
请求时页面上通过ognl对象导航方式来注入请求参数值:ognl根据请求对象名调用action类的get方法获取对象,再根据请求参数名调用JavaBean中的get方法获取参数。
属性封装:

public class user {
	private String account;
	private String passwd;
	public String getAccount() {
		return account;
	}
	public void setAccount(String account) {
		this.account = account;
	}
	public String getPasswd() {
		return passwd;
	}
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}
	public String toString() {
		return "Account:"+account+"\nPassword:"+passwd;
	}
}

action类中获取实例对象:

public class indexAction extends ActionSupport {
	private user user;
	public user getUser() {
		return user;
	}
	public void setUser(user user) {
		this.user = user;
	}
}

表单内容,使用对象名+属性名:

<form action="login-admin" method="post">
	<input type="text" name="user.account" placeholder="用户名"/><br/>
	<input type="text" name="user.passwd" placeholder="密码"/><br/>
	<input type="submit" value="登录">
form>

页面也可以通过JavaBean类获取参数:

账号:${user.account}
密码:${user.passwd}
3.模型驱动

struts提供一个拦截器接口ModelDriven,Action实现该接口后,由该Action处理的请求都要经过ModelDriven拦截器,可以自定义方法getModel(),拦截器调用getModel()方法返回model对象,并将该对象插入到值栈(ValueStack)中,页面可以直接从值栈中获取数据。
用户提交请求后,系统会创建两个对象:Action实例和ValueStack对象,请求数据直接通过ValueStack可以赋值给JavaBean对象(放在ValueStack的root中),页面也从ValueStack中获取数据,直接写参数名,不需给ognl表达式添加JavaBean对象名。

public class indexAction extends ActionSupport implements ModelDriven<Can>{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Can user = new Can();//实例化对象
	public Can getUser() {
		return user;
	}
	public void setUser(Can user) {
		this.user = user;
	}
	public Can getModel() {//返回model对象
		return user;
	}
}

页面(表单):

账号:${account}
密码:${passwd}

ValueStack用于存放请求线程运行所需的数据,生命周期与请求线程相同,包括以下:

  • Application
  • Session
  • Request:前三个使用Map类型存放application,session,request的属性
  • Value Stack(root):狭义的ValueStack,是ognl访问的根
  • Action:当前Action的运行空间
  • Parameters:请求的参数
  • attribute:范围,依次搜索page、request、session、application。
    ValueStack工作方式:
  1. 当struts2接收到一个action请求之后,系统会先创建action实例和ValueStack对象,action不会马上执行execute()方法,而是将action的属性放入ValueStack对象的顶层节点中,值都为默认值,如String为null,int为0等。
  2. struts2依次调用拦截器链中的拦截器。
  3. 拦截器会截获用户的请求参数,并存入ValueStack顶层节点。
  4. 调用action的方法,在调用execute()方法之前,系统会将ValueStack顶层节点中的值赋给action的相应属性。

你可能感兴趣的:(struts2学习)