在一个大的项目里面,actionForm会很多,那么有没有什么方法避免actionForm的膨胀呢?
有,那就是DynaActionForm,,它不用写actionForm类了(可以称为标准或者静态actionForm),只需要通过在struts-config.xml文件配置一下即可,DynaActionForm可以获得标准actionForm的所有功能。一个好例子比说千言万语好用,那就例子伺候:
form-bean的name属性的值是可以随便写的跟以前一样,只不过type属性不能像以前标准actionForm那样直接写它的类就行,而应该写DynaActionForm的类,但是这个类的在哪呢,打开struts.jar下的org.apache.struts.action找到DynaActionForm.class
type属性设置完后,既然DynaActionForm也是actionForm,它也要接收数据啊,如 <form-property name="username" type="java.lang.String"/> 这里的属性名要和表单的属性名一致,其中除了type属性外 还有initial属性,是给字段加初始值的,还有一个size属性,表示要接收数组的长度。
DynaActionForm验证怎么做呢,一种做法就是继承DynaActionForm,当然也就是继承了actionForm,因为DynaActionForm是继承actionForm的,然后再覆写DynaActionForm的validate方法,然后把继承的类配置到struts-config.xml里,不过这样就失去DynaActionForm的意义啦,因为这样就会又写了一个子类为了实现validate。所以通常DynaActionForm都是采用动态验证框架的,这个在前面的博文已经介绍过啦,在这就不赘述了。
好啦,配置完了,看看怎么用呢,action是必须有的,那就建立下,DynaActionFormTestAction.java如下
那么如何取得DynaActionForm的值呢,很简单,由于DynaActionForm是继承actionForm的,所以方法一样,强制转换下DynaActionForm daf = (DynaActionForm)form;由于DynaActionForm类里面是通过一个HashmMap做数据收集的,所以在取数据的时候跟用HashmMap方法一样的啦,get(key)就行啦。
接下来我们看看成功页面如何显示DynaActionForm返回的结果
这样就大功告成了,好了 ,23点了 ,睡了。