Struts2的数据封装
Struts2框架是一个web层的框架,web层的框架是一个软件的半成品,提供了数据封装的基本的功能.
属性驱动的数据封装
- 属性驱动:提供属性set方法的封装
jsp页面
<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页面
action页面中需要提供所有被封装的数据的set方法
这种方法并不是很好,因为如果存在多属性封装,那么就需要书写多个set方法
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页面的书写
注意,需要在属性前面写上属性所属对象,user.username
<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页面的书写
action页面书写的时候,首先需要创建封装对象的实例,然后需要在action中创建需要封装对象的Getter And Setter,该方法与action的关系不大,主要是依靠jsp页面,以及前端控制器,在action方法之中一定要写上get的方法,这样前端控制器才可以取到在action页面中的private的需要封装的对象。
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;
}
}