struts2中请求参数封装的 3 种方式

第一种,无实体类,直接用action类来充当实体类:

<form action="${pageContext.request.contextPath}/testform/getform" method="post">
	姓名:<input type="text" name="username"/><br>
	年龄:<input type="text" name="age"/><br>
	生日:<input type="text" name="birthday"/><br>
	<input type="submit" value="提交"/>
</form>
package com.dimples.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class TestFormAction extends ActionSupport {
	private String username;
	private Integer age;
	private Date birthday;
	
	
	public String getUsername() {
		return username;
	}


	public void setUsername(String username) {
		this.username = username;
	}


	public Integer getAge() {
		return age;
	}


	public void setAge(Integer age) {
		this.age = age;
	}


	public Date getBirthday() {
		return birthday;
	}


	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}


	public String justTest() {
		System.out.println(username + "===" + age + "===" + birthday);
		return SUCCESS;
	}
}

注意事项:form表单中的参数名,要和我们的action类中get\set方法对得上,而跟属性名没什么直接联系!

                struts2会自动为我们解决post方式的乱码问题,而get方式不解决。

                对于日期类型,只认本地格式:yyyy-mm-dd,其他格式不认

                对于数组类型,会将各元素以逗号加空格的方式连起来成一个字符串

                在我们的action类实例化之后,动作方法调用之前,一个名为params的拦截器帮我们调用了set方法。


第二种:使用OGNL表达式

这是页面的表单

<form action="${pageContext.request.contextPath}/testform/getform2" method="post">
	姓名:<input type="text" name="cat.name"/><br>
	年龄:<input type="text" name="cat.age"/><br>
	生日:<input type="text" name="cat.birthday"/><br>
	<input type="submit" value="提交"/>
</form>

这是对应的实体类Cat

package com.dimples.domain;

import java.io.Serializable;
import java.util.Date;

public class Cat implements Serializable {
	private String name;
	private Integer age;
	private Date birthday;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
	@Override
	public String toString() {
		return "Cat [name=" + name + ", age=" + age + ", birthday=" + birthday + "]";
	}
	
	
	
}

这是动作类:

package com.dimples.action;

import com.dimples.domain.Cat;
import com.opensymphony.xwork2.ActionSupport;

public class TestFormAction2 extends ActionSupport {
	private Cat cat;

	public Cat getCat() {
		return cat;
	}

	public void setCat(Cat cat) {
		this.cat = cat;
	}
	
	public String justTest() {
		System.out.println(cat);
		return SUCCESS;
	}
	
}

第三种:模型驱动(用的最多)

1、动作类实现ModelDriven接口

2、动作类需要定义一个模型,并且需要实例化

3、提供接口抽象方法的实现,返回值是模型对象

前台页面:

<textarea rows="1" cols="1">第三种参数包装</textarea>
<form action="${pageContext.request.contextPath}/testform/getform3" method="post">
	姓名:<input type="text" name="name"/><br>
	年龄:<input type="text" name="age"/><br>
	生日:<input type="text" name="birthday"/><br>
	<input type="submit" value="提交"/>
</form>

实体类同上面第二种

动作类:

package com.dimples.action;

import com.dimples.domain.Cat;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class TestFormAction3 extends ActionSupport implements ModelDriven<Cat>{//实现接口
	private Cat cat = new Cat();//实例化一个模型对象
	@Override
	public Cat getModel() {//实现方法
		return cat;
	}
	
	public String justTest() {
		System.out.println(cat);
		return SUCCESS;
	}

}

如果是要封装list集合或者map,则只能使用第二种方式,因为集合和map中有多个对象元素,这时候在jsp上写name的时候必须得带上具体对象名称,否则struts2不知道该给你封装到哪个对象里去啊,而三种方式里只有第二种可以带对象名:

<!-- 第四种:集合封装 -->
<form action="${pageContext.request.contextPath}/testform/getform4" method="post">
	姓名:<input type="text" name="cats[0].name"/><br>
	年龄:<input type="text" name="cats[0].age"/><br>
	生日:<input type="text" name="cats[0].birthday"/><br>
	
	姓名:<input type="text" name="cats[1].name"/><br>
	年龄:<input type="text" name="cats[1].age"/><br>
	生日:<input type="text" name="cats[1].birthday"/><br>
	
	姓名:<input type="text" name="cats[2].name"/><br>
	年龄:<input type="text" name="cats[2].age"/><br>
	生日:<input type="text" name="cats[2].birthday"/><br>
	<input type="submit" value="提交"/>
</form>
<!-- 第五种:map类型封装 -->
<textarea rows="1" cols="1">第五种,map类型封装</textarea>
<form action="${pageContext.request.contextPath}/testform/getform5" method="post">
	姓名:<input type="text" name="map['cat1'].name"/><br>
	年龄:<input type="text" name="map['cat1'].age"/><br>
	生日:<input type="text" name="map['cat1'].birthday"/><br>
	
	姓名:<input type="text" name="map['cat2'].name"/><br>
	年龄:<input type="text" name="map['cat2'].age"/><br>
	生日:<input type="text" name="map['cat2'].birthday"/><br>
	
	姓名:<input type="text" name="map['cat3'].name"/><br>
	年龄:<input type="text" name="map['cat3'].age"/><br>
	生日:<input type="text" name="map['cat3'].birthday"/><br>
	<input type="submit" value="提交"/>
</form>

动作类分别是:

List集合封装动作类:

public class TestFormAction4 extends ActionSupport {
private List<Cat> cats;public List<Cat> getCats() {return cats;}public void setCats(List<Cat> cats) {this.cats = cats;}public String justTest() {System.out.println(cats);return SUCCESS;}}
Map类封装动作类如下:
public class TestFormAction5 extends ActionSupport {
	private Map<String,Cat> map;

	public Map<String, Cat> getMap() {
		return map;
	}

	public void setMap(Map<String, Cat> map) {
		this.map = map;
	}
	
	public String justTest() {
		System.out.println(map);
		return SUCCESS;
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值