Struts2的数据封装

Struts2框架是一个web层的框架,web层的框架是一个软件的半成品,提供了数据封装的基本的功能.前端

属性驱动的数据封装

  • 属性驱动:提供属性set方法的封装

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