無論是將Action中的變量渲染頁面中,或者從request中將內(nèi)容回傳到Action中變量的過程,統(tǒng)稱參數(shù)綁定。  

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