對對象的數據封裝有三種方法
一、通過原始的方法
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;
}