对对象的数据封装有三种方法
直接把表单提交的属性封装到action属性当中,要求action所定义的属性必须要与表单中提交的数据名称要一样。例如
package com.tui; import java.util.Arrays; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import org.apache.struts2.dispatcher.Parameter; import org.apache.struts2.interceptor.ServletRequestAware; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class Form1DemoAction4 extends ActionSupport{ private String uname; private String upassword; private String uaddress; public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUpassword() { return upassword; } public void setUpassword(String upassword) { this.upassword = upassword; } public String getUaddress() { return uaddress; } public void setUaddress(String uaddress) { this.uaddress = uaddress; } @Override public String execute() throws Exception { // TODO 自动生成的方法存根 System.out.println(uname+":" +upassword+":"+uaddress); return NONE; } }而表单为
<form action="${pageContext.request.contextPath }/form5.action" method="post"> 姓名:<input type="text" name="uname"> <br> 密码:<input type="text" name="upassword"> <br> 地址:<input type="text" name="uaddress"> <br> <input type="submit" value="提交信息"> </form>在一个action 中,获取表单数据可以属性封装,使用模型驱动封装,不能通过使用属性封装和模型驱动封装来获取同一个表单的数据,如果同时使用,只会执行模型驱动
第一步: 在action里面声明实体类
第二步 生成实体类变量的set和get方法
第三步 在表单输入项的name属性值里面写表达式形式
//注意必须要有set方法
package com.tui; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class Form1DemoAction6 extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String execute() throws Exception { // TODO 自动生成的方法存根 System.out.println(user); return NONE; } }前端:
<form action="${pageContext.request.contextPath }/form6.action" method="post"> 姓名:<input type="text" name="user.uname"> <br> 密码:<input type="text" name="user.upassword"> <br> 地址:<input type="text" name="user.uaddress"> <br> <input type="submit" value="提交信息"> </form>注意:
1 使用表达式封装和模型驱动封装都可以把数据封装到实体类对象里面
2 不同点
(1) 使用模型驱动只能把数据封装到一个实体类对象里面
在一个action里面不能使用模型驱动把数据封装到不同的实体类对象里面
(2) 使用表达式封装可以把数据封装到不同的实体类对象里面
Address:<input type="text" name="user.address"/> Bname:<input type="text" name="book.bname"/>
而后台
Private Book book; Public void setBook(Book book) { this.book=book; } Public Book getBook() { return book; }