Struts2 獲取表單資料到實體的三種方法
方法一:屬性封裝
(1)在action中宣告屬性成員變數,要求變數的名稱和表單中name的名稱一致,表單內容程式碼如下:
<form name="form1" method="post" action="${pageContext.request.contextPath }/data1.action">
姓名:<input name="username" type="text"/><br/>
密碼:<input name="password" type="text"/><br/>
地址:<input name="address" type="text"/><br/>
<input type="submit" value="提交">
</form>
action中程式碼如下:
public class UserInfo extends ActionSupport {
private String username;
private String password;
private String address;
@Override
public String toString() {
return "UserInfo [getUsername()=" + getUsername() + ", getPassword()="
+ getPassword() + ", getAddress()=" + getAddress() + "]";
}
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;
}
public String execute()
{
System.out.println(toString());
return NONE;
}
}
配置程式碼如下:
<action name = "data1" class = "com.data.UserInfo"></action>
方法二:模型驅動封裝
(1)在action中實現介面ModelDriven
(2)實現接口裡面的getModel方法,返回建立的物件
(3)在action 中手動建立實體類。(前提要求:表單輸入項name與實體成員變數名稱相同)
action中的程式碼如下:
public class data2 extends ActionSupport implements ModelDriven<UserInfo>{
private UserInfo ui = new UserInfo();
@Override
public UserInfo getModel() {
// TODO Auto-generated method stub
return ui;
}
public String execute()
{
System.out.println(ui);
return NONE;
}
}
方法三:屬性表示式封裝
(1)在action中宣告一個實體類
(2)在action中生成實體類的set和get方法
(3)在表單輸入name的使用 實體類.name 的方式
表單程式碼如下:
<form name="form1" method="post" action="${pageContext.request.contextPath }/data3.action">
姓名:<input name="userinfo.username" type="text"/><br/>
密碼:<input name="userinfo.password" type="text"/><br/>
地址:<input name="userinfo.address" type="text"/><br/>
<input type="submit" value="提交">
</form>
action中的程式碼如下:
public class data3 extends ActionSupport {
private UserInfo userinfo;
public UserInfo getUserinfo() {
return userinfo;
}
public void setUserinfo(UserInfo userinfo) {
this.userinfo = userinfo;
}
public String execute()
{
System.out.println(userinfo);
return NONE;
}
}
模型驅動與屬性封裝的區別:
(1)模型驅動一次只能給一個實體類賦值,如果表單中資料想要分別賦值給兩個實體類,該方法做不到
(2)屬性封裝就可以做到,程式碼如下:
action 中程式碼如下:
public class data3 extends ActionSupport {
private UserInfo userinfo;
private User2 user2;
public User2 getUser2() {
return user2;
}
public void setUser2(User2 user2) {
this.user2 = user2;
}
public UserInfo getUserinfo() {
return userinfo;
}
public void setUserinfo(UserInfo userinfo) {
this.userinfo = userinfo;
}
public String execute()
{
System.out.println(userinfo +"\n" + user2);
return NONE;
}
}
表單中的程式碼如下:
<form name="form1" method="post" action="${pageContext.request.contextPath }/data3.action">
姓名:<input name="userinfo.username" type="text"/><br/>
密碼:<input name="userinfo.password" type="text"/><br/>
地址:<input name="userinfo.address" type="text"/><br/>
性別:<input name="user2.sex" type="text"/><br/>
<input type="submit" value="提交">
</form>