Struts2封装获取表单数据方式
使用最原始方式获取表单封装到实体类对象
</head>
<body>
<form action="${pageContext.request.contextPath }/form4.action" method="post">
username:<input type="text" name="username"/>
<br/>
password:<input type="text" name="password"/>
<br/>
address:<input type="text" name="address"/>
<br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
public class Form4DemoAction extends ActionSupport {
public String execute() throws Exception {
//1 获取表单数据
HttpServletRequest request = ServletActionContext.getRequest();
String username = request.getParameter("username");
String password = request.getParameter("password");
String address = request.getParameter("address");
//2 封装到实体类对象里面
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setAddress(address);
System.out.println(user);
return NONE;
}
属性封装(会用)
1 直接把表单提交属性封装到action的属性里面
2 实现步骤
(1)在action成员变量位置定义变量
- 变量名称和表单输入项的name属性值一样
(2)生成变量的set方法(把set和get方法都写出来)
3 使用属性封装获取表单数据到属性里面,不能把数据直接封装到实体类对象里面
package cn.itcast.data;
import com.opensymphony.xwork2.ActionSupport;
/**
* 使用属性封装获取表单数据
* @author asus
*
*/
public class DataDemo1Action extends ActionSupport {
//1 定义变量
//变量的名称和表单输入项name属性值一样
private String username;
private String password;
private String address;
//2 生成变量的set和get方法
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String execute() throws Exception {
System.out.println(username+":"+password+":"+address);
return NONE;
}
}
模型驱动封装(重点)
<body>
<form action="${pageContext.request.contextPath }/data2.action" method="post">
username:<input type="text" name="username"/>
<br/>
password:<input type="text" name="password"/>
<br/>
address:<input type="text" name="address"/>
<br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
public class DataDemo2Action extends ActionSupport implements ModelDriven<User>{
//创建对象
//前提要求: 表单输入项name属性值 和 实体类属性名称一样
private User user = new User();
public User getModel() {
//返回创建user对象
return user;
}
@Override
public String execute() throws Exception {
System.out.println(user);
return NONE;
}
(2)实现接口里面的方法 getModel方法
- 把创建对象返回
(3)在action里面创建实体类对象
3 使用模型驱动和属性封装注意问题:
(1)在一个action中,获取表单数据可以属性封装,使用模型驱动封装,
不能同时使用属性封装和模型驱动封装获取同一个表单数据
如果同时使用,之后执行模型驱动
表达式封装(会用)
1 实现过程
(1)使用表达式封装可以把表单数据封装到实体类对象里面
第一步 在action里面声明实体类
第二步 生成实体类变量的set和get方法
一定要有get set 方法
public class User {
private String username;
private String password;
private String address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", address=" + address + "]";
}
}
public class Book {
private String bname;
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
}
/**
* 使用表达式封装数据到实体类对象
* @author asus
*
*/
public class DataDemo3Action extends ActionSupport {
//1 声明实体类
private User user;
private Book book;
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
//2 生成实体类变量的set和get方法
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
System.out.println(user);
System.out.println(book.getBname());
return NONE;
}
第三步 在表单输入项的name属性值里面写表达式形式
<body>
<form action="${pageContext.request.contextPath }/data3.action" method="post">
username:<input type="text" name="user.username"/>
<br/>
password:<input type="text" name="user.password"/>
<br/>
address:<input type="text" name="user.address"/>
<br/>
bname: <input type="text" name="book.bname"/>
<br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
2 把表达式封装归类到属性封装里面
比较表达式封装和模型驱动封装
1 使用表达式封装和模型驱动封装都可以把数据封装到实体类对象里面
2 不同点:
(1)使用模型驱动只能把数据封装到一个实体类对象里面
- 在一个action里面不能使用模型驱动把数据封装到不同的实体类对象里面
(2)使用表达式封装可以把数据封装到不同的实体类对象里面
封装到集合里面
封装数据到List集合
第一步 在action声明List
第二步 生成list变量的set和get方法
/**
* 封装数据到list集合
* @author asus
*
*/
public class ListAction extends ActionSupport {
// 1 声明List变量
private List<User> list;
// 2 生成get和set方法
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
@Override
public String execute() throws Exception {
System.out.println(list);
return NONE;
}
第三步 在表单输入项里面写表达式
</head>
<body>
<form action="${pageContext.request.contextPath }/list.action" method="post">
<!-- list[0] : 表示list集合中第一个user对象 -->
username:<input type="text" name="list[0].username"/><br/>
password:<input type="text" name="list[0].password"/><br/>
address:<input type="text" name="list[0].address"/><br/><br/>
username:<input type="text" name="list[1].username"/><br/>
password:<input type="text" name="list[1].password"/><br/>
address:<input type="text" name="list[1].address"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
封装数据到Map集合
第一步 声明map集合
第二步 生成get和set方法
/**
* 封装数据到map集合
* @author asus
*
*/
public class MapAction extends ActionSupport {
// 1 声明map集合
private Map<String,User> map;
public Map<String, User> getMap() {
return map;
}
public void setMap(Map<String, User> map) {
this.map = map;
}
@Override
public String execute() throws Exception {
System.out.println(map);
return NONE;
}
}
第三步 在表单输入项的name属性值里面写表达式
<body>
<form action="${pageContext.request.contextPath }/map.action" method="post">
<!-- 设置key值 map['key值']
设置value值
-->
username:<input type="text" name="map['one'].username"/>
<br/>
password:<input type="text" name="map['one'].password"/>
<br/>
address:<input type="text" name="map['one'].address"/>
<br/><br/>
username:<input type="text" name="map['abcd'].username"/>
<br/>
password:<input type="text" name="map['abcd'].password"/>
<br/>
address:<input type="text" name="map['abcd'].address"/>
<br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>