定義:

  • 在struts2中,頁面的資料和action(控制層)傳輸基本上有兩種方式,一個是屬性驅動、另一個是模型驅動。

屬性驅動

  1. 基本資料型別的屬性對應:
    就是Web頁面上html標籤的name屬性或者與屬性相對應的getter/setter相對應。當頁面提交的時候,struts2會自動從request物件裡面把資料取出來,然後按照名稱進行對應,自動設定到Action的屬性裡面去。
    缺點:如果實體屬性太多,相應的getter/setter方法也會很多,Action類會顯得十分零亂。
public class LoginAction extends ActionSupport{

    private String userName;
    private String password;


    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    public String login(){

        return "login";
    }
}

//前臺頁面
<body>
    <form action="${basePath }/login_login">
    使用者名稱:  <input  type="text" name="userName" />
    使用者密碼: <input  type="text" name="password" />
            <input type="submit" value="提交"/>
    </form>
</body>
  1. 直接使用域物件(推薦用這種):
    為了解決上種方式的問題,struts2提供了直接使用域物件的屬性驅動(即把屬性和對應的getter/setter方法從Action裡面移出去,單獨封裝成一個域物件,然後在Action類中直接使用這個域物件就可以了。需要改變的是,在相應的name屬性上,新增一個域物件的字首,指明這個值到底對應到哪一個域物件裡去。(需要有setter方法)
//前臺頁面
<body>
    <form action="${basePath }/login_login">
    使用者名稱:  <input  type="text" name="user.userName" />
    使用者密碼: <input  type="text" name="user.password" />
            <input type="submit" value="提交"/>
    </form>
</body>

//Action類裡把屬性封裝成了User實體並例項化了一個物件user
public class LoginAction extends ActionSupport{

    //域模型驅動
    User user = new User();

    public String login(){

        return "login";
    }
}

模型驅動

  • 實現方式:讓Action實現一個ModelDriven的介面。這個介面需要我們實現一個getModel的方法,這個方法返回的就是Action所使用的資料模型物件。採用ModelDriven的方式一個Action只需要一個Model,因此web介面裡的name不需要加上字首修飾。(需要有setter方法)
<form action="${basePath }/login_login">
    使用者名稱:  <input  type="text" name="userName" />
    使用者密碼: <input  type="text" name="password" />
            <input type="submit" value="提交"/>
</form>

//LoginAction類
public class LoginAction extends ActionSupport implements ModelDriven{

    User user = new User();//模型驅動也需要例項化

    public String login(){

        return "login";
    }


    @Override
    public Object getModel() {
        return user;
    }
}
.