struts2裏的ModelDriven的簡單使用

  1. Struts 2沒有像Struts 1“forms”。在Struts 2請求中的參數直接綁定到字段操作類,在Action執行時這個類是放在堆棧的頂部的。
  2. 如果類實現的需要com.opensymphony.xwork2.ModelDriven接口,那麼它需要從getModel()方法返回一個對象。

簡單的說,使用ModelDriven,可以直接把頁面數據的收集成實體類。
代碼舉例如下:

//一個POJO實體類
public class User {
    private String name;//用戶登錄名
    private String password;//用戶密碼
    public User() {
        super();
    }
    public User(String name, String password) {
        super();
        this.name = name;
        this.password = password;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

讓UserAction實現一個ModelDriven接口,同時實現接口中的方法:getModel()。

//Action方法
public class UserLoginAction extends ActionSupport implements ModelDriven<User>{

    private User user = new User();
    private UserLoginService userLoginService = new UserLoginServiceImpl();

    public User getModel() {
        return user;
    }
    public String login() throws Exception {

        boolean loginUser = userLoginService.login(user);
        if (loginUser) {
            return "success";
        } else {
            return "login";
        }
    }
}

Action中需要引入的頭文件有:

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

ps:jsp正常按名傳參數就可以了

機制解釋:ModelDriven的實現依靠ModelDrivenInterceptor(struts2攔截器鏈的一部分)。
這裏寫圖片描述

當一個請求經過ModelDrivenInterceptor的時候,在這個攔截器中,會判斷當前要調用的Action對象是否實現了ModelDriven接口,如果實現了這個接口,則調用getModel()方法,並把返回值(本例是返回user對象)壓入ValueStack。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章