1. 原始方式获取表单数据封装到实体类(User)
2.采用属性封装
使用属性封装获取表单数据到属性里面,不能把数据直接封装到实体类对象里
实现步骤:
(1)在action成员变量位置定义变量
变量名称和表单输入项name属性值一样
(2)生成变量的set方法
表单数据
<form action="${pageContext.request.contextPath }/form.action" method="post">
用户名:<input type="text" name="username"/><br/>
密 码:<input type="password" name="password"/><br/>
地 址:<input type="text" name="address"/><br/>
<input type="submit" value="提交"/>
</form>
声明表单属性,并生成set方法
private String username;
private String password;
private String address;
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setAddress(String address) {
this.address = address;
}
public String execute() throws Exception {
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setAddress(address);
return NONE;
}
3.模型驱动封装(重点)
使用模型驱动封装可以把数据直接封装到实体类对象里
实现步骤:
(1)action实现ModelDriven
(2)实现接口里面的方法getModel()
把创建对象返回
(3)在action里创建实体类对象
public class DemoAction1 extends ActionSupport implements ModelDriven<User> {
//创建对象
//前提要求:表单输入项name属性值和实体类属性名称一样
private User user = new User();
public User getUser() {
return user;
}
@Override
public User getModel() {
//返回创建的对象
return user;
}
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
}
使用模型驱动和属性封装注意问题:
在一个action中,获取表单数据可以属性封装,使用模型驱动封装,不能同时使用在同一表单数据,如果同时使用只执行模型驱动
4.表达式封装
使用表达式封装可以
把数据直接封装到实体类对象里
实现过程:
(1)在action里声明实体类
(2)生成实体类变量的set get 方法
(3)在表单输入项的name属性值里写表达式形式
//声明实体类
private User user;
//生成实体类变量的set get方法
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
<form action="${pageContext.request.contextPath }/form.action" method="post">
用户名:<input type="text" name="user.username"/><br/>
密 码:<input type="password" name="user.password"/><br/>
地 址:<input type="text" name="user.address"/><br/>
<input type="submit" value="提交"/>
</form>