<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的接口因此模型封裝只會封裝一個到一個實體類中,
表達式封裝能夠吧數據封裝到多個對象中。