DynaActionForm(动态ActionForm)

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、说明:

  1. 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. 配置文件中的编译器对其配置不做检查,因此容易出错

猜你喜欢

转载自blog.csdn.net/Pluto__lxh/article/details/82013369