接下來咱們看一直Struts2是如何傳值的。程序員
仍是上個jsp頁面,不過表單的action的值改變了,input標籤的name值也做了相應的修改。框架
<form id="form0" name="form0" method="post" action="/user/save.action"> <input type="text" name="user.username" /> <input type="text" name="user.gender" /> <input type="text" name="user.age" /> <input type="text" name="user.height" /> <input type="submit" value="提交" /> </form>
用過Struts2的同窗都知道如上正是普通的Struts提交表單的方式,用戶點擊提交,表單裏的以下值:jsp
- user.username
- user.gender
- user.age
- user.height
會被髮送到名稱爲user(下稱爲UserAction)的save方法裏(此處按正常約定,相應不會有人會將該Action的配置路徑寫成/book),在UserAction這個類中有一個名爲user的實體對象(下稱UserEntity),該對象中在UserAction中有對應的set/get方法,這樣Struts2在處理後,UserAction類的user對象的值會被相應填充。接着在要使用該對象的地方(即此處的save方法)就能夠直接用以下方式取值:模塊化
- user.getUsername()
- user.getGender()
- user.getAge()
- user.getHeight()
值得一提的是,在沒有任何業務邏輯的save()方法裏就兩句代碼,方法以下:post
public String save() { new UserService().save(user); return SUCCESS; }
注意:如上代碼並未使用Spring的ioc功能,因此就建立了一個UserService對象用於保存實體。code
因而可知Struts2框架在普通servlet的基礎上進行了封裝,固然,Struts2框架的功能遠遠超過這些,仍是那句話,咱們只關注於接值傳值。orm
其實,UserAction的save()方法能夠讀取到user對象的值,別的其它方法也能接收到的,由於Struts2在接值的時候是面向Action類的。對象
多說一句,有不少公司(或程序員)不注重模塊化,致使代碼中一個Action類的代碼達到4000~1w行,其中有大量的私有屬性+set/get,ognl在將數據從頁面賦值給Action裏會使得程序變慢,由於我在調用save()方法時,UserAction這個類中的其它屬性(即非user屬性)都會進行封裝(更氣人的是,當Action類中的屬性對象爲空時,Strut2會爲咱們建立一個對象,當Action類中的屬性過多時問題就出現了,更更氣人的是,大多數企業使用Struts2+Hibernate進行開發,UserEntity中還會有一個部門實體對象DeptEntity,更會手慢程序)。開發
最後附上UserAction僞代碼(代碼純手寫,不必定能運行):get
public class UserAction { public String save() { new UserService().save(user); return SUCCESS; } }