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;
    }
}
相關文章
相關標籤/搜索