示例代碼:
public class AttributeAction extends ActionSupport { // 屬性直接放在action類中,并且每一個屬性都得寫get和set方法 PRivate String name; private String passwd; // 經過struts2的封裝,可以直接在這里獲取到我們需要的數據 // 我們并沒有自己去設置這些屬性的值,都是struts2幫我們做好了 // 這就是屬性驅動的封裝機制 public String execute() { System.out.println(name); System.out.println(passwd); return SUCCESS; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPasswd() { return passwd; } public void setPasswd(String passwd) { this.passwd = passwd; }}要使用上面的action我們可以使用下面的form表單來提交:<%-- 這里action參數寫的是action的絕對路徑 --%><form action="<%=basePath%>normal/AttributeAction" method="post"> <input type="text" name="name"> <input type="text" name="passwd"> <button type="submit">提交</button></form>我們發現這種方法在屬性較少的情況下可取,如果屬性很多,代碼會很亂,所以有了下面的模型驅動
二,模型驅動
(1),不使用struts2標簽的模型驅動
// 實現ModelDriven接口,泛型中寫我們封裝的數據public class StudentAction extends ActionSupport implements ModelDriven<User> { // 我們必須實例化我們封裝的數據,struts2會直接使用我們的這個類,將數據set進去 // 所以我們必須在這個類中寫get和set方法 User u = new User(); // 實現此接口必須實現的方法,返回我們封裝的數據 @Override public User getModel() { return u; } @Override // 這種方法我們完全沒有設置什么,但是struts2依然為我們將數據放了進去 // 這里其實是java反射的應用 public String execute() throws Exception { System.out.println(u.getName()); System.out.println(u.getPasswd()); return "success"; }}使用這種action的form表單和屬性驅動的一模一樣
(2)使用struts2標簽的模型驅動
示例代碼:
// 注意,這里不用實現ModelDriven接口// 看馬士兵說的這叫域模型public class DomainModelAction extends ActionSupport { // 注意,這里不用自己實例化,struts2會幫助我們實例化 // 所以,user里面必須有不帶參數的構造方法 // 同時,注意下面,我們必須寫出user的get和set方法 User user; public String execute() { try { System.out.println(user.getName()); System.out.println(user.getPasswd()); } catch (NullPointerException e) { return ERROR; } return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; }}為什么說是標簽驅動的呢?看下面的form表單:<form action="normal/DomainModel_add" method="post"> <%--注意name屬性,必須是我們action中的數據名稱.屬性名--%> <input type="text" name="user.name"> <input type="text" name="user.passwd"> <button type="submit">提交</button></form>還可以使用struts2的標簽:<%--這里定位action的方式是和配置struts.xml差不多,使用namespace和action名--%><s:form namespace="/normal" action="DomainModel_add" method="POST"> <%--name屬性也必須這樣寫--%> <s:textfield name="user.name"/> <s:passWord name="user.passwd"/> <s:submit>提交</s:submit></s:form>這就是struts2的3種數據封裝機制,核心的機制是Java反射
新聞熱點
疑難解答