动态ActionForm使用随笔

来源:互联网 发布:精准数据挖掘系统 编辑:程序博客网 时间:2024/05/01 08:11
接触Struts久了不免会对其有这样或那样的看法,前阶段潜心研究Struts,对其中的动态ActionForm的使用就有一些意见,在这里跟大家说道说道,希望大家能够给点意见。
一、用途
动态ActionForm与标准的Form的用途如出一辙,都是为了能够作为DTO(Data Transfer Object)对向来与Action做数据传递,所不同的是动态ActionForm并没有一个专门的类作为DTO对象的载体,取而代之的是在Struts配置文件FormBean中增加属性配置项,来达到与DTO对象相同的作用。下面我们以用户登陆的应用为例,讨论一下普通的ActionForm与动态ActionForm的区别。
用户通过输入用户名和密码后经过校验进入系统。过程描述的很简单,ActionForm设计起来也不复杂,我们只需要设定一下两个属性就可以了:
private String userID;
private String userPwd;
最后我们为着两个属性加上getset方法就完成了普通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=”userPwdtype=”java.lang.String”/>
  </form-bean>
</form-beans>
这样便完成了一个动态ActionForm的定义,我们不需要定义getset方法来设置或者获得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的可配置型无疑是其存在优势之一,,但笔者发现,其可配置性的作用可谓捉襟见肘。因为可配置的FormBeanAction的耦合度还是相当大的。也就是说,由于Action类李引用了如“String userID=(String)form.get(“userID”);”这样的代码,那么当我们增加或删除Form中的属性的时候就必须更改我们的Action类,这与普通的ActionForm的作法是一样的,失去了其可配置的优势所在。
综上,笔者推荐使用普通的ActionForm去履行DTO的职责,因为那样会更方便解决应用问题。动态ActionForm只是一点小尝试,不推荐使用。以上官邸均属个人看法,不妥之处还望各位能够批评指正!


原创粉丝点击