接觸 Struts 久了不免會對其有這樣或那樣的看法,前階段潛心研究 Struts ,對其中的動態 ActionForm 的使用就有一些意見,在這里跟大家說道說道,希望大家能夠給點意見。
一、 用途
動態 ActionForm 與標準的 Form 的用途如出一轍,都是為了能夠作為 DTO(Data Transfer Object) 對向來與 Action 做數據傳遞,所不同的是動態 ActionForm 并沒有一個專門的類作為 DTO 對象的載體,取而代之的是在 Struts 配置文件 FormBean 中增加屬性配置項,來達到與 DTO 對象相同的作用。下面我們以用戶登陸的應用為例,討論一下普通的 ActionForm 與動態 ActionForm 的區別。
用戶通過輸入用戶名和密碼后經過校驗進入系統。過程描述的很簡單, ActionForm 設計起來也不復雜,我們只需要設定一下兩個屬性就可以了:
private String userID;
private String userPwd;
最后我們為著兩個屬性加上 get 和 set 方法就完成了普通 ActionForm 的設計。如果需要的話,我們還可以在這個 Formli 覆蓋 validate() 方法來對用戶輸入的信息進行簡單的校驗。
下面,我們就來看看動態 ActionForm 是通過怎樣的設計來達到和上面同樣的效果的吧!
我們在 struts-config 文件中的 <form-bean> 標簽中定義我們的動態 Form ,代碼如下。
< form-beans >
? < form-bean ? name =” loginForm ”? type =” org.apache.struts.action.DynaActionForm ”>
<!---- 下面是設置 Form 的屬性 --- >
??????<form-poperty? name =” userID ”? type =” java.lang.String ”/>
??????<form-poperty? name =” userPwd ” type =” java.lang.String ”/>
??</ form-bean >
</ form-beans >
這樣便完成了一個動態 ActionForm 的定義,我們不需要定義 get 和 set 方法來設置或者獲得 Form 屬性的值,我們只需要在我們的 Action 中使用:
String userID=(String)form.get(“userID”);
這樣的方法獲得 Form 中的數據,或者是通過
form.set(“userID”,” 001318”);
這樣的方法設置 Form 中的屬性值。
從上面的論述不難看出兩種 ActionForm 的用途與使用差別不是很大,都可以完成對視圖的數據傳遞的作用。而從便捷角度來看動態 FormBean 顯得優勢明顯,因為他的設計更為簡單,而且由于具有可配置的優勢,使其在實際操作方面顯得跟為靈活!
二、 差異
上面的論述能夠突出動態 ActionForm 的優勢,下面我們來看看動態 ActionForm 的“致命傷”。
1、? 數據驗證
細心的讀者會發現我在提及普通的 ActionForm 的時候我曾經講到過可以在 ActionForm 中的 validate() 方法對用戶輸入的信息進行簡單的校驗,而在動態 ActionForm 中卻從未提到。這是因為如果想要實現動態 ActionForm 的校驗我們必須做很多工作。首先我們必須引入 Validator 驗證框架來幫助我們完成數據校驗工作,其次由于某些數據的校驗,我們還有可能為其編寫數據校驗項來幫助 Validator 框架完成數據校驗工作。這與普通的 ActionForm 相比,動態 ActionForm 顯得繁瑣而笨拙。
2、? 可配置
動態 ActionForm 的可配置型無疑是其存在優勢之一,,但筆者發現,其可配置性的作用可謂捉襟見肘。因為可配置的 FormBean 與 Action 的耦合度還是相當大的。也就是說,由于 Action 類李引用了如“ String userID=(String)form.get(“userID”); ”這樣的代碼,那么當我們增加或刪除 Form 中的屬性的時候就必須更改我們的 Action 類,這與普通的 ActionForm 的作法是一樣的,失去了其可配置的優勢所在。
綜上,筆者推薦使用普通的 ActionForm 去履行 DTO 的職責,因為那樣會更方便解決應用問題。動態 ActionForm 只是一點小嘗試,不推薦使用。以上官邸均屬個人看法,不妥之處還望各位能夠批評指正!
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=375179