1. 程式人生 > >【SSH快速進階】——struts2的模型驅動—ModelDriven

【SSH快速進階】——struts2的模型驅動—ModelDriven

上篇部落格《SSH快速進階——struts2簡單的例項》中,處理使用者登陸的action—LoginAction為:

package com.danny.user.action;

public class LoginAction {
    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 execute() { if("admin".equals(username) && "admin".equals(password)) { return
"success"; }else{ return "error"; } } }

可以發現,LoginAction中的屬性和jsp頁面表單中的input都是一 一對應的,這就是struts2的屬性驅動。但這是登陸頁面,只有使用者名稱和密碼,如果客戶需要你做個這樣的頁面呢?

這裡寫圖片描述

我想你只能呵呵了吧~~

這時候如果再用第一種方式也就是屬性驅動來傳值,您肯定能夠想象到action中能有多亂吧,光定義屬性的程式碼就能佔200行~~

所以這時候可以考慮用struts2中的另一種傳值方式——模型驅動。

為了簡單說明,還用上篇部落格中的例子來說明。

如果上篇部落格中的LoginAction需要用模型驅動,那麼只需要新增一個模型User.java,修改一下LoginAction即可。

User.java

package com.danny.user.vo;

public class User {
    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;
    }
}

LoginAction.java

package com.danny.user.action;

import com.danny.user.vo.*;
import com.opensymphony.xwork2.ModelDriven;

//要實現模型驅動的Action需要實現ModelDriven介面
public class LoginAction  implements ModelDriven{

    //必須定義並例項化模型例項
    private User user=new User();

    //實現getModel方法,用於獲取例項物件
    @Override
    public Object getModel() {
        return user;
    }

    //引用模型例項    
    public String execute() {
        if("admin".equals(user.getUsername()) && "admin".equals(user.getPassword()))
        {
            return "success";
        }else{
            return "error";
        }
    }
}

LoginAction修改的地方有:
1、實現了ModelDriven介面;
2、去掉了欄位和屬性的定義,取而代之的是定義並例項化了模型物件,實現getModel方法用於獲取物件,在其他成員方法中就可以直接引用此物件。

需要注意的是,頁面表單input的name屬性值必須和模型(比如這裡的User.java)的get、set方法後面的名字一樣。比如表單中某一個input的name屬性值為“username”,那麼相應的get方法名為“getUsername”或“getusername”(不區分大小寫)。