目录
方式1、属性驱动
通过在类中创建成员变量自动装载
举例:
form表单
<form action="${pageContext.request.contextPath}/Demo5Action.action" method="get">
用户名:<input type="text" name="name"/><br>
年 龄:<input type="text" name="age"><br>
生 日:<input type="text" name="brithday">
<input type="submit" value="提交"><br>
</form>
创建action
支持特定类型的属性驱动
public class Demo5Action extends ActionSupport {
public Demo5Action(){
System.out.println("方法被创建!!!");
}
//创建一个与参数名称相同的属性 自动装配 接收参数
private String name;
//struts2能自动转化8大基本类型和对应的包装类
private Integer age;
//支持特定类型字符串转化为Date,例如yyyy-MM-dd
private Date brithday;
@Override
public String execute() throws Exception {
System.out.println("获取到的参数:name=" + name + "\n,年纪:age=" + age);
System.out.println("年纪birthday:" + brithday);
return SUCCESS;
}
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 getBrithday() {
return brithday;
}
public void setBrithday(Date brithday) {
this.brithday = brithday;
}
}
配置struts.xml
<action name="Demo5Action" class="cn.ycsj.struts.Demo5Action" method="execute">
<result name="success" >
/form1.jsp
</result>
</action>
参数就能自动装载到name属性中。
servlet是线程不安全的,如果再类中设置成员变量,不安全,servlet一般在方法中声明成员变量。
action的生命周期,每次请求action时,都会创建新的action对象,所以才支持在类中定义成员变量。
action是线程安全的
验证方式在action中创建一个构造方法,
方式2、对象驱动
创建user对象
package cn.ycsj.entity;
import java.util.Date;
public class User {
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;
}
}
表单 对象.属性
<form action="${pageContext.request.contextPath}/Demo6Action.action" method="get">
用户名:<input type="text" name="user.name"/><br>
年 龄:<input type="text" name="user.age"><br>
生 日:<input type="text" name="user.birthday">
<input type="submit" value="提交"><br>
</form>
action
public class Demo6Action extends ActionSupport {
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
private User user;
public Demo6Action(){
System.out.println("方法被创建!!!");
}
@Override
public String execute() throws Exception {
System.out.println(user);
System.out.println("用户名:" + user.getName());
System.out.println("年龄:" + user.getAge());
System.out.println("生日:" + user.getBirthday());
return SUCCESS;
}
}
配置struts.xml
<action name="Demo6Action" class="cn.ycsj.struts.Demo6Action" method="execute">
<result name="success" >
/form1.jsp
</result>
</action>
这样就把数据封装到了user对象中。
方式3、模型驱动
也是将参数封装到了对象中,但是不需要再表单中写XX.xx这种形式 前台不要更改
也需要User实体类
form表单
<form action="${pageContext.request.contextPath}/Demo10Action.action" method="get">
用户名:<input type="text" name="name"/><br>
年 龄:<input type="text" name="age"><br>
生 日:<input type="text" name="birthday">
<input type="submit" value="提交"><br>
</form>
action 需要实现implements ModelDriven<User> 接口 使用泛型的形式
package cn.ycsj.struts;
import cn.ycsj.entity.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class Demo10Action extends ActionSupport implements ModelDriven<User> {
//配置成员变量
private User user= new User();
public Demo10Action(){
System.out.println("方法被创建!!!");
}
@Override
public String execute() throws Exception {
System.out.println(user);
System.out.println("用户名:" + user.getName());
System.out.println("年龄:" + user.getAge());
System.out.println("生日:" + user.getBirthday());
return SUCCESS;
}
@Override
public User getModel() {
return user;
}
}
配置struts.xml 省略 ——————
方式4、集合类型的参数封装
表单
表单中封装map的时候需要同时执行属性
<form action="${pageContext.request.contextPath}/Demo11Action.action" method="get">
list:<input type="text" name="list"/><br>
list:<input type="text" name="list[1]"/><br>
list:<input type="text" name="list[4]"/><br>
map:<input type="text" name="map['haha']"/><br>
map:<input type="text" name="map['hehe']"/><br>
map:<input type="text" name="map['xixi']"/><br>
<input type="submit" value="提交"><br>
</form>
action
定义list map 生成getset方法。
package cn.ycsj.struts;
import com.opensymphony.xwork2.ActionSupport;
import java.util.List;
import java.util.Map;
public class Demo11Action extends ActionSupport {
//list集合接收参数
private List<String> list;
//map接收参数
private Map<String,Object> map;
public Demo11Action(){
System.out.println("方法被创建!!!");
}
@Override
public String execute() throws Exception {
System.out.println(list);
System.out.println(map);
return SUCCESS;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
}
配置struts.xml 省略------