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; } }