1、DynaActionForm的使用目的
动态ActionForm是为了避免标准ActionForm膨胀而设计的,使用动态ActionForm可以获得标准ActionForm的所有功能 即ActionForm类就不用写了,仅在配置文件中配置一下,就能完成ActionForm的相关功能。
动态actionForm完成动态验证框架
2、DynaActionForm的配置
DynaActionForm在struts-config.xml文件进行配置
配置方式如下:
<form-beans>
<form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="username" type="java.lang.String" />
<form-property name="age" type="java.lang.Integer"/>
</form-bean>
</form-beans>
3、说明:
- org.apache.struts.action.DynaActionForm是struts框架提供的类,它继承了ActionForm类
<form-property name="username" type="java.lang.String" />
<form-property name="age" type="java.lang.Integer"/>
配置属性:
1. name 对表单数据进行搜集,属性名 name 一定要和表单中的name 一致,type为包装类,应写明其完整径。
2. initial属性 可对一个初值进行初始化相当于reset()方法
3. size属性 可声明一个数组的长度
4. 通常DynaActionForm的验证采用动态验证框架validator不用写代码
4、DynaActionForm的数据收集
*在Action中使用动态ActionForm,参见DynaActionFormTestAction.java
DynaActionForm daf = (DynaActionForm)form;
String username = (String)daf.get("username");
Integer age = (Integer)daf.get("age");
说明:
动态ActionForm其实是把页面中的html的表单元素的名字和值放到了map中,所以通过get方法可以取出相应的值
5、DynaActionForm的数据收集过程
创建了一个DynaActionForm的对象后,在该对象中有一个map(formproperties)
它的数据结构如下:
Map FormBeans = new HashMap()
FormBeans{
key=dynaForm
value=new FormBeanConfig()
{ String name="dynaForm”
String type= “DynaActionForm”
}
key= uploadForm
value=new FormBeanConfig()
{ String name="uploadForm
String type= “UploadActionForm”
}
……..
}
<form-property name="username" type="java.lang.String"/>
<form-property name="age" type="java.lang.Integer"/>
DynaActionForm{
HashMap formProperties = new HashMap()
}
formProperties{
key= username
value= new FormPropertyConfig {
String name="username"
String type="java.lang.String"
key= age
value= new FormPropertyConfig{
String name= age
String type= "java.lang.Integer"
}
}
}
http://127.0.0.1:8080/struts_actionform/dyanactionform.do? username="tom"&age="23"
DynaActionForm
BeanUtils.setProperty(bean, name, value);
HashMap dynaValues = new HashMap();
dynaValues.put(name, value);
}
dynaValues{
key=“username”
value=“Tom”
key=“age”
value=20;
}
用户名称:${dynaForm.map.username }
年龄:${dynaForm.map.age }
public Map getMap() {
return (dynaValues);
}
type="org.apache.struts.validator.DynaValidatorForm
public class DynaValidatorForm extends DynaActionForm
{
}
import org.apache.struts.action.PlugIn;
public interface PlugIn {
void destroy();
void init(ActionServlet servlet, ModuleConfig config)
throws ServletException;
}
public class ValidatorPlugIn implements PlugIn{
private String pathnames = null;
public String getPathnames() {
return pathnames;
}
public void setPathnames(String pathnames) {
this.pathnames = pathnames;
}
}
dynaValues{
key=“username”
value=“Tom”
key=“age”
value=20;
}
把表单中的数据按照配置文件中的类型转换后放到DynaActionForm的对象的map中。
在daf.get(“username”);语句中,从map中按照key值( username),取出其value值( Tom)
缺点:
1. 数据传送困难,不能传送大量数据
2. 配置文件中的编译器对其配置不做检查,因此容易出错