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