Struts2框架是一個web層的框架,web層的框架是一個軟件的半成品,提供了數據封裝的基本的功能.前端
jsp頁面java
<h3>方式一:屬性驅動-提供set的方法的方式</h3> <form action=" ${ pageContext.request.contextPath}/userAction1.action" method="post"> 用戶名: <input type="text" name="username"/><br/> 密碼: <input type="password" name="password"/><br/> 年齡: <input type="text" name="age"/><br/> 生日: <input type="text" name="birthday"/><br/> 工資: <input type="text" name="salary"/><br/> <input type="submit" value="提交"/> </form>
action頁面web
action頁面中須要提供全部被封裝的數據的set方法框架
這種方法並非很好,由於若是存在多屬性封裝,那麼就須要書寫多個set方法dom
package demo2; import com.opensymphony.xwork2.ActionSupport; import java.util.Date; /** * 數據封裝方式一:提供屬性的set方法的方式 */ public class UserAction1 extends ActionSupport { //提供了對應的屬性 private String username; private String password; private Integer age; private Date birthday; private Double salary; //提供對應的set方法 public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public void setAge(Integer age) { this.age = age; } public void setBirthday(Date birthday) { this.birthday = birthday; } public void setSalary(Double salary) { this.salary = salary; } @Override public String execute() throws Exception { //接收數據; System.out.println(username); System.out.println(password); System.out.println(age); System.out.println(salary); System.out.println(birthday); //封裝數據; return NONE; } }
屬性驅動的方法,主要須要在jsp頁面中配置jsp
jsp頁面的書寫ide
注意,須要在屬性前面寫上屬性所屬對象,user.usernamepost
<h3>方式二:屬性驅動-在頁面中提供表達式</h3> <form action=" ${ pageContext.request.contextPath}/userAction2.action" method="post"> 用戶名: <input type="text" name="user.username"/><br/> 密碼: <input type="password" name="user.password"/><br/> 年齡: <input type="text" name="user.age"/><br/> 生日: <input type="text" name="user.birthday"/><br/> 工資: <input type="text" name="user.salary"/><br/> <input type="submit" value="提交"/> </form>
action頁面的書寫this
action頁面書寫的時候,首先須要建立封裝對象的實例,而後須要在action中建立須要封裝對象的Getter And Setter,該方法與action的關係不大,主要是依靠jsp頁面,以及前端控制器,在action方法之中必定要寫上get的方法,這樣前端控制器才能夠取到在action頁面中的private的須要封裝的對象。code
package demo2; import com.opensymphony.xwork2.ActionSupport; import domain.User; /** * 數據封裝的方式二 屬性驅動 在頁面中提供表達式 */ public class UserAction2 extends ActionSupport { //提供一個私有的對象 private User user = new User(); //提供User的set和get方法,必需要提供get方法 public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String execute() throws Exception { System.out.println(user); return NONE; } }
使用表達式的方法能夠同時向多個對象進行數據的封裝
模型驅動的方式是最經常使用的方式,缺點在於同時只能向一個對象中封裝數據
jsp頁面的書寫
注意,在模型驅動的數據封裝之中與jsp的頁面關係不大,與set方法的封裝方式同樣
<h3>方式三:模型驅動-採用模型驅動的方式</h3> <form action=" ${ pageContext.request.contextPath}/userAction3.action" method="post"> 用戶名: <input type="text" name="username"/><br/> 密碼: <input type="password" name="password"/><br/> 年齡: <input type="text" name="age"/><br/> 生日: <input type="text" name="birthday"/><br/> 工資: <input type="text" name="salary"/><br/> <input type="submit" value="提交"/> </form>
action頁面的書寫
action頁面中,首先要實現ModelDriven< User >接口,注意接口要實現被封裝對象的泛型,而後須要手動提供對象的實例。而後須要實現接口的getModel的方法
package demo2; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; import domain.User; /** * 數據封裝的方式三 模型驅動的方式封裝數據 */ public class UserAction3 extends ActionSupport implements ModelDriven<User> { //模型驅動使用的對象,必須手動提供對象的實例 private User user = new User(); //模型驅動須要制定的方法 @Override public User getModel() { return user; } @Override public String execute() throws Exception { System.out.println(user); return NONE; } }