這裏的數據處理,指的是頁面上的數據與Action中的數據的處理。java
struts2中有3種方式來接收請求提交的數據。分別是:屬性驅動方式、對象驅動方式、模型驅動方式jsp
1. 屬性驅動方式ide
要求頁面中的表單項的名稱與Action處理類中的屬性名同樣,post
而且在Action處理類中提供屬性的get/set方法。這樣就能夠在Action處理方法中獲取表單中的數據值了。this
若是是轉發,也能夠在頁面中經過el表達式把Action處理類的屬性值獲取到${屬性名}。spa
add.jspcode
<body> <form action="add.action" method="post"> 用戶名:<input type="text" name="name"/><br/> 年齡:<input type="text" name="age"/><br/> 性別:<input type="text" name="sex"/><br/> 電話:<input type="text" name="phone"/><br/> <input type="submit" value="submit"/> </form> </body>
UserAction.javaorm
public class UserAction { //屬性名必須和表單項的名稱一致,注意命名規範,而且提供get/set方法 private String name; private int age; private String sex; private String phone; //處理結果信息 private String msg; //用戶的添加處理方法 public String add(){ System.out.println("name="+name+"\tage="+age+"\tsex="+sex+"\tphone="+phone); msg="添加用戶成功"; return Action.SUCCESS; }
public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
struts2會作基本的數據類型轉換。對象
2.對象驅動方式blog
在servlet處理中,獲取表單項的值後,須要手動建立對象。
在struts2中,提供了一種對象驅動方式,能夠直接在Action處理類中獲取對象,再也不須要手動建立對象。
這種方式須要在處理類中聲明對象屬性,在表單項的名稱由 對象名.對象屬性名 組成。
User 對象
public class User { private String name; private int age; private String sex; private String phone; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
addObject.jsp 頁面
<body> <form action="addObject.action" method="post"> 用戶名:<input type="text" name="user.name"/><br/> 年齡:<input type="text" name="user.age"/><br/> 性別:<input type="text" name="user.sex"/><br/> 電話:<input type="text" name="user.phone"/><br/> <input type="submit" value="submit"/> </form> </body>
UserObjectAction 處理類
public class UserObjectAction { private User user; private String msg;
public String add(){ System.out.println("name="+user.getName()+"\tage="+user.getAge()+"\tsex="+user.getSex()+"\tphone="+user.getPhone()); msg="數據獲取成功"; return Action.SUCCESS; }
public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
一般使用對象驅動方式
3.模型驅動方式
在對象驅動方式上,能夠實如今處理類中直接獲取對象,可是對象驅動方式相比屬性驅動方式,頁面的編寫更復雜(多寫了對象屬性名),
當屬性很是多時,編寫效率下降。因此,strut2提供了模型驅動。
模型驅動綜合了屬性驅動和對象驅動的優勢,可是模型驅動具備侵入性。
使用模型驅動處理類,須要實現 ModelDriven 接口 。
User 類
public class User { private String name; private int age; private String sex; private String phone; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
AddModel.jsp
<form action="addModel.action" method="post"> 用戶名:<input type="text" name="name"/><br/> 年齡:<input type="text" name="age"/><br/> 性別:<input type="text" name="sex"/><br/> 電話:<input type="text" name="phone"/><br/> <input type="submit" value="submit"/> </form>
UserModelAction
public class UserModelAction implements ModelDriven<User>{ private User user= new User(); private String msg; public String add(){ System.out.println("name="+user.getName()+"\tage="+user.getAge()+"\tsex="+user.getSex()+"\tphone="+user.getPhone()); msg="數據獲取成功"; return Action.SUCCESS; } @Override public User getModel() { return user; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
總結:
從3種獲取表單數據的方式中,能夠看出,當不須要再處理類中獲取對象時,應該採用屬性驅動;
當屬性較少,而且須要在處理類中獲取對象時應該採用對象驅動;
當屬性較多,而且須要在處理類中獲取對象時應該採用模型驅動;
實際開發中,跟團隊保持一致。通常都是在對象驅動和模型驅動中選擇
補充:
響應數據
在頁面中獲取struts2的響應數據有2個要點:
1.獲取的數據必須是處理類的屬性,而且提供了get/set 方法
2.在頁面中能夠經過 el 和 jstl 獲取數據,也能夠經過 ognl 表達式獲取