对对象的数据封装有三种方法
一、通过原始的方法
package com.tui;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class Form1DemoAction3 extends ActionSupport implements ServletRequestAware {
private HttpServletRequest request;
@Override
public void setServletRequest(HttpServletRequest request) {
// TODO 自动生成的方法存根
this.request=request;
}
@Override
public String execute() throws Exception {
// TODO 自动生成的方法存根
String username=request.getParameter("uname");
String userpassword=request.getParameter("upassword");
String useraddress=request.getParameter("uaddress");
System.out.println(username+":" +userpassword+":"+useraddress);
//将数据写入到对象当中去
User user=new User();
user.setUname(username);
user.setUaddress(useraddress);
user.setUpassword(userpassword);
return NONE;
}
}
二、属性封装
直接把表单提交的属性封装到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>
三、实现模型驱动(实现ModelDriven<T>接口)
package com.tui;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class Form1DemoAction5 extends ActionSupport implements ModelDriven<User>{
private User user=new User();
@Override
public String execute() throws Exception {
// TODO 自动生成的方法存根
System.out.println(user);
return NONE;
}
@Override
public User getModel() {
// TODO 自动生成的方法存根
return user;
}
}
在一个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;
}