無論是將Action中的變量渲染頁面中,或者從request中將內容回傳到Action中變量的過程,統稱參數綁定。
1. 最原始的Struts2會直接賦值Action中的變量。 如hello.action?id=1,會將action中的id屬性賦值。
2. 如果參數較多,而且都屬于同一個對象的,可以將所有屬性都放入一個對象中,比如hello.action?user.id
會為action中的User對象的id屬性賦值。
3. ModelDriven接口,如果不想寫太多"user."前綴,如${user.id},可以實現ModelDriven接口的getModel函數,
返回user對象。則Struts2碰到{id}時,就會嘗試調用getModel() 獲得user對象再獲取其id屬性。
4. Prepareable接口,還有一種情況Hibernate常用的情況,一個對象可能有很多屬性(比如有10個屬性),
但頁面上可能只顯示5個屬性的輸入框。如果按上面的方法,先new一個User類,然后從頁面上賦值。
保存此對象時就會將不在頁面上修改的5個屬性清空了。這時就需要兩次的binding,一開始user變量為空,
只綁定了action的id屬性,然后在prepare()函數中查出有完整10個屬性的對象,然后二次綁定時再將頁面的那5個屬性
復制到user對象中。
prepare()函數有兩種作用,一種專門為了二次binding,一種是作為公共的數據準備函數。但是,
一個action內有多個method,不是每一個method都需要執行prepare,比如list()方法,如果這種method較多,
或者會造成沖突時,還有另外一種方式來定義二次binding函數。比如prepareSave() 函數,就會默認的在執行save()
前執行,此時,專門實現prePareMethodName() 方法再調度一個內部的prepare函數,而將prepare()函數留空。