接触
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