Struts2 03---數據封裝+獲取表單提交數據

    Struts的數據封裝分爲三種:屬性封裝,模型驅動,表達式封裝。下面以獲取表單提交數據來簡單介紹一下Struts的數據封裝。

<form action="loginlogin.action" method="post">
用戶名:<input name="username" ><br>
密碼:<input name="pwd" type="password"><br>
<input type="submit" value="登陸">
</form>

  使用第一種方法,屬性封裝來獲取數據的時候須要將form表單內的兩個name值進行封裝:ide

package com.action;

import com.opensymphony.xwork2.ActionSupport;
import com.sun.net.httpserver.Authenticator.Success;
public class LoginbAction extends ActionSupport {
    private String username;
    private String pwd;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    @Override
    public String execute() throws Exception {
    System.out.println("獲取到的表單數據:"+username+"---"+pwd);
        return SUCCESS;
    }
}

 

第二種方式,模型驅動;post

 1.建立實體類(屬性名必須和表單的name屬性值如出一轍)this

package com.entity;

/**
 * 
 * @ClassName: ELogin
 * @Description: 模型驅動的實體層
 * @author Administrator
 * @date 2017年10月10日 下午6:46:00
 *
 */
public class ELogin {
    private String username;
    private String pwd;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

}

2.action實現ModelDriven接口, 實例化一個對象,實現ModelDriven接口的getModel方法,方法返回的是實例化對象的變量名。spa

package com.action;

import com.entity.ELogin;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
 * 
* @ClassName: LoginAction
* @Description: 模型驅動  經過反射獲取提交過來的屬性值
* @author Administrator
* @date 2017年10月10日 下午6:44:46
*
 */
public class LoginAction extends ActionSupport implements ModelDriven<ELogin>{
    
    public String login(){
        System.out.println("獲取到表單數據:"+elogin.getUsername()+"---"+elogin.getPwd());
        return NONE;
    }
    
@Override
public String execute() throws Exception {
    
    return super.execute();
}

private ELogin elogin=new ELogin();
@Override
public ELogin getModel() {
    
    return elogin;
}

}

 

第三種方式:表達式封裝;.net

1.和模型驅動同樣,表達式封裝也須要建立一個實體類。code

2.在LoginAAction類中聲明實體類(這裏不須要實例化),再生成實體類對象名的set和get的方法。orm

package com.action;

import com.entity.ELogin;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 
* @ClassName: LoginaAction
* @Description: 表達式封裝
* @author py
* @date 2017年10月10日 下午6:48:11
*
 */
public class LoginaAction extends ActionSupport{
    
    private ELogin elogin;
    
    public ELogin getElogin() {
        return elogin;
    }
    public void setElogin(ELogin elogin) {
        this.elogin = elogin;
    }
@Override
public String execute() throws Exception {
 System.out.println("獲取到表單數據:"+elogin.getUsername()+"---"+elogin.getPwd());
return SUCCESS; 
}
}

3.和模型驅動不一樣的是,這裏的表單name屬性須要作一個修改,要用對象變量名.屬性名。server

<form action="newlogin.action" method="post">
用戶名:<input name="elogin.username" ><br>
密碼:<input name="elogin.pwd" type="password"><br>
<input type="submit" value="登陸">
</form>

 

這三種方式均可以獲取到表單提交的值。可是要注意的是:在一個action中不能給對同一個表單使用屬性封裝和模型封裝,若是使用只會執行模型驅動封裝。對象

表達式封裝和模型封裝的相同點以及不一樣點:blog

相同點:
均可以把數據封裝到實體類中

不一樣點:
模型封裝只可以把數據封裝到一個實體類中,在一個action裏面只能實現一次ModelDriven的接口因此模型封裝只會封裝一個到一個實體類中,

表達式封裝能夠吧數據封裝到多個對象中。

相關文章
相關標籤/搜索