示例表单:
配置信息:
I.Struts2提供的获取表单数据(至实体类对象)方式
1.属性封装
1.1 特点:直接把表单提交属性封装到action的属性里面
1.2 实现步骤
(1).在action成员变量位置定义变量(名称和表单提交的name一致)
(2).生成成员变量的set(和get)方法
public class DataDemo extends ActionSupport {
private String uname;
private String utime;
private String uaddr;
public void setUname(String uname) {this.uname = uname;}
public void setUtime(String utime) {this.utime = utime; }
public void setUaddr(String uaddr) { this.uaddr = uaddr;}
public String execute(){
System.out.println(uname+" "+utime+" "+uaddr);
return NONE;
}
}
1.3 缺陷:仅获取表单数据到属性里,不能把数据封装到实体类对象中
2.模型封装(重要)
2.1 特点:直接把表单数据封装到实体类对象中
2.2 实现步骤
(1) 实现接口ModelDriven
(2) 实现接口里的方法,把创建对象返回
(3) 创建实体类User(属性名要与表单提交name一致)
(3) 在action中创建实体类对象user
public class DataDemo extends ActionSupport implements ModelDriven {
private User user=new User(); //创建实体类对象
public String execute(){
System.out.println(user.getUaddr()+user.getUname()+user.getUtime());//测试
return NONE;
}
@Override
public User getModel() { //实现接口方法
return user;
}
}
2.3 注意点
(1)在一个action中,获取表单数据不能同事使用属性封装和模型驱动封装获取同一个表单数据,如果同事使用,则执行模型驱动(属性封装无法获取数据)。
(2)模型封装只能把数据封装到一个实体类里面,不可以封装至多个实体类中(ModelDriven
3.表达式封装(了解)
也可以把表单数据封装到实体类对象里,且可以将数据封装至多个实体类(声明多个实体类对象及getset方法,并对表单name表达式作相应修改)
实现步骤:
Action类:
public class DataDemo extends ActionSupport{
//2.添加对象get,set方法
public User getUser() { return user; }
public void setUser(User user) { this.user = user; }
//1.声明实体类对象
private User user;
public String execute(){
System.out.println(user.getUaddr()+user.getUname()+user.getUtime());
return NONE;
}
}
表单修改:
II.获取表单数据封装至不同数据类型
1.封装数据至List集合
步骤:
(1) 在action中声明List
private List list;
(2) 生成list变量的set,get方法
(3) 在表单输入项里面写表达式(list[0]代表list集合中第一个user对象)
用户名:
2.封装数据至Map集合
步骤:
(1) 在action中声明Map
private Map map;
(2) 生成map变量的set,get方法
(3) 在表单输入项里面写表达式(设置key值)
用户名: