Struts1框架三之里面的DynActionForm讲解

我们来看看struts-config.xml的配置信息

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">


<struts-config>
    <!-- 配置所有的formbean,每个formbean都可以用一个<form-bean>类指定-->
    <form-beans>
        <form-bean name="Student_Bean" type="org.apache.struts.action.DynaActionForm">
            <form-property name="username" type="java.lang.String"></form-property>
            <form-property name="password" type="java.lang.String"></form-property>
        </form-bean>
    </form-beans>

    <!-- 配置具体接受action请求的信息,每一个action请求都可以用一个<action>来指定 -->
    <action-mappings>
        <!-- 配置action信息,其中
            path表示用户form请求路径;
            type表示服务器组件action的类;
            name表示formBean组件;
            scope表示将FormBean封装到那个域中
            validate表示是否要验证该formBean
         -->
        <action path="/login" type="com.xingyao.action.LoginAction" attribute="Student_Bean1"
        name="Student_Bean" scope="request" validate="false">
            <!-- 具体请求的时候,得到返回结果,需要跳转(转发)的页面 -->
            <forward name="success" path="/WEB-INF/JSP/success.jsp"></forward>
            <forward name="error" path="/WEB-INF/JSP/error.jsp"></forward>
        </action>
    </action-mappings>
</struts-config>

这里我们主要是注意

 <form-beans>
        <form-bean name="Student_Bean" type="org.apache.struts.action.DynaActionForm">
            <form-property name="username" type="java.lang.String"></form-property>
            <form-property name="password" type="java.lang.String"></form-property>
        </form-bean>
    </form-beans>

这段信息,这里的name与要对应起来,type=”的值是固定的:org.apache.struts.action.DynaActionForm”,然后form表单有几个值这里就配置几个标签
使用Action接受表单参数的方法为
这里写图片描述

这样就能再后台完成表单的数据收集

使用jsp接受表单参数的方法为

其中Student_bean1为action配置信息里面的,如果没有定义这个标签,则等于,也就是说表单数据收集的方法为${ | .map.表单字段名}
那么这个DynaActionForm是怎么进行表单数据收集的呢?让我们查看该类的源码码

public class DynaActionForm extends ActionForm implements DynaBean {

protected DynaActionFormClass dynaClass = null;

保存了表单数据的信息,所以我们需要在jsp页面使用.map才能得到表单的数据
protected HashMap dynaValues = new HashMap();


public void initialize(ActionMapping mapping) {

    String name = mapping.getName();
    if (name == null) {
        return;
    }
    //封装了配置信息里面的<form-Bean>的信息,也就是:<form-bean name="Student_Bean" 

type=”org.apache.struts.action.DynaActionForm”> —————这里进行详细讲解1
FormBeanConfig config =
mapping.getModuleConfig().findFormBeanConfig(name);
if (config == null) {
return;
}
//然后对这个

public class FormBeanConfig implements Serializable {
    /**
     * Return the form property configurations for this module.  If there
     * are none, a zero-length array is returned.
     */
    public FormPropertyConfig[] findFormPropertyConfigs() {

        FormPropertyConfig results[] =
            new FormPropertyConfig[formProperties.size()];
            //这里将表单结果信息封装成一个结果数组对象
        return ((FormPropertyConfig[]) formProperties.values().toArray(results));

    }
}

上面已经可以得到所有的表单名和表单数据了,调用这个set(props[i].getName(), props[i].initial());方法只不过是将这些数据封装到这个DynaActionFrom里面的属性 protected HashMap dynaValues = new HashMap();里面设值
/**
*/
public void set(String name, Object value) {
dynaValues.put(name, value);
}
通过上面的方法就能得到该请求需要的formbean信息,然后交给父类ActionForm进行数据的收集,具体的收集步骤请参考:整理笔记二里面的processPopulate方法
总结
1、DynaActionForm调用 public void initialize(ActionMapping mapping) 方法,得到一个FormBeanConfig对象
2、FormBeanConfig里面有一个属性值为 protected HashMap formProperties = new HashMap();,这个属性值里面封装了所有的DynaAction动态数据的信息
3、通过参数name得到该请求对应的的类型,其中name的值为
4、调用public void initialize(FormBeanConfig config)方法
5、该方法再调用findFormPropertyConfigs()方法,里面其实就是返回了FormBeanConfig里面的属性 protected HashMap formProperties = new HashMap();,里面封装了该里面的所有属性与其对应的值
6、然后再遍历formProperties集合在调用set(props[i].getName(), props[i].initial());,往DynaActionForm里面的属性 protected HashMap dynaValues = new HashMap();设值,这个属性就完成了对页面表单的收集
7、在后台得到参数,是作为一个map集合存在的,所以不能使用对里面的属性值进行赋值给po(结果Bean)

另:
附件里面有我一个最简单关于DynaActionForm的实现
转载请标明出处
感谢苏波老师的指导
个人见解、错误请指出!请莫怪

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值