無論是將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()函數留空。