Struts 学习笔记之ActionForm

本文深入探讨了Struts框架中的ActionForm组件,包括其继承结构、常用方法、动态ActionForm配置、表单验证机制及ValidatorForm与ValidatorActionForm的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Struts 学习笔记之ActionForm

Struts 学习笔记之ActionForm

 

Struts 中定义了一些JavaBeans ,主要是以ActionForm 为父类扩展开来的,如下图:

 

 

actionform.JPG  

org.apache.struts.action 包中

public abstract class ActionForm implements Serializable

public class DynaActionForm extends ActionForm implements DynaBean

 

org.apache.struts.validator 包中

public class ValidatorForm extends ActionForm implements Serializable

public class DynaValidatorForm extends DynaActionForm

implements DynaBean, Serializable

 

org.apache.struts.validator 包中

public class ValidatorActionForm extends ValidatorForm implements Serializable

public class DynaValidatorActionForm extends DynaValidatorForm

    implements DynaBean, Serializable

 

1ActionForm 中比较常用的两个方法是reset()validator()

// 恢复ActionForm 属性的默认值,如把boolean 型设为true/false ,字符串设为null

public void reset ( ActionMapping mapping, HttpServletRequest request ) { }

// validate 只检查数据格式和语法,不检查数据是否符合业务逻辑。

public ActionErrors validate ( ActionMapping mapping, HttpServletRequest request ) { return (null); }

这两个方法的默认实现是不执行任何操作,我们可以重写这两个方法来实现相关逻辑。

 

注: 对于每个request ,控制器都会先调用ActionFormreset() 方法,然后表单数据组装到ActionForm 中。如ActionFormrequest 范围内,那么对于每个新的request 请求都会创建新的ActionForm 实例。新实例创建后,如果它的属性已经被初始化为默认值 ,那么接着再在reset() 方法中把属性设为默认值不是很有必要,这时可以让reset() 方法为空。

 

对于session 范围内的ActionForm ,同一ActionForm 实例会被多个请求共享,reset() 方法在这种情况下极为有用。

 

2 . 其中,ActionForm 需要我们创建一个formbean 类继承ActionForm ,在ActionForm 中可以定义一些propertyget/set 方法。

ActionFormproperty 必须声明然后才可以使用,不过在查询时我们常常需要输入一些查询条件,这些查询条件(property )其实不需要在formbean 中声明,这时可以使用Map 对象 来封装整个查询表单提交的数据,如下:

public class MapForm extends ActionForm {

    private Map map = null;

    public void setMap(Map map) {

        this.map = map;

    }

    public Map getMap() {

        return this.map;

    }

     // 增加查询条件(property )的get/set 方法,并把数据放到Map

    public void setAttribute(String attributeKey, Object attributeValue) {

        map.put(attributeKey, attributeValue);

    }

    public Object getAttribute(String attributeKey) {

        Object keyValue = map.get(attributeKey);

        return keyValue;

    }

}

 

在页面上可以通过

 

来获取表单数据,这会调用getAttribute("id") 方法。

 

3 . 其中,Dyna 开头的动态ActionForm 不需要创建具体的ActionForm 类,只需通过Struts 的配置文件就可以完成ActionForm 的全部配置,如:

Dyna ActionForm ">

   

   

 

 

4 . 其中,含有validator ActionForm 用来进行表单验证,验证方法有两种。

 

struts-config.xml 中设置actionvalidate 属性为"true" (默认为"true" ),

 

        type="com.cn.lively.action.UpdateUserAction"

        name="userForm"

        scope="request"

        input="/jsp/updateUser.jsp"

        cancellable="true"

        validate="true" >

   

 

 

并且在相应的formbean 中重写其中的validate 方法,在validate 方法中实现自己的数据验证逻辑。

 

通过validation 框架进行验证,这分为两步:

struts-config.xml 中配置validation 插件,

 

   

                  value="/org/apache/struts/validator/validator-rules.xml ,

                         /WEB-INF/validation.xml " />

 

 

配置formbean ,有下面两种方法:

 

㈠ 使自己的formbean 类继承含有validator ActionForm

public class UserForm extends ValidatorForm{

    private String userName;

    public String getUserName() {

        return userName;

    }

    public void setUserName(String userName) {

        this.userName = userName;

    }

}

并配置struts-config.xml 文件:

userForm " type="com.cn.lively.formbean.UserForm ">

 

 

㈡ 使自己的formbean 类继承含有validator Dyna ValidatorForm

userForm " type="org.apache.struts.validator.Dyna ValidatorForm ">

   

 

 

配置validation.xml 文件:

 

   

userForm ">

 

       

           

       

   

 

 

注: 注意 validation.xml 文件中的userForm struts-config.xml 文件中formbean 的名字。

 

关于arg 的几个属性如下:

bundle :指定资源文件名,如不指定,则从默认资源文件 中读取

key :从资源文件 ActionResources.properties 中得到的值

resourcekey 所指定的信息是否来自外部的资源文件,默认为true 。如果为true ,则代表keybuddle 属性所指定的资源文件中的key

position ,这个arg 中的值用来替换信息中的哪一部分, 需要替换的部分以{n} 标志。

 

5 . 关于ValidatorForm/ DynaValidatorForm ValidatorActionForm/ DynaValidatorActionForm 之间的区别

 

对于一个actionform ,可以被多个action 所使用,而每个action 可能需要的验证字段都不一样,而validation.xml 中配置的验证方式(如

)是对这个 formbean 进行的 .

 

 

如果需要针对每个action 来验证 ,则必须使formbean 继承ValidatorActionForm (或者直接配置DynaValidatorActionForm )。如下两种方法:

㈠ 使自己的formbean 类继承含有validator ActionForm

public class UserForm extends ValidatorActionForm {

    ……

}

并配置struts-config.xml 文件:

userForm " type="com.cn.lively.formbean.UserForm ">

 

 

 

    /createUser "

            type="com.cn.lively.action.CreateUserAction"

            name="userForm "/>

    /updateUser "

            type="com.cn.lively.action.UpdateUserAction"

            name="userForm "/>

 

 

㈡ 使自己的formbean 类继承含有validator DynaValidatorActionForm

userForm " type="org.apache.struts.validator.DynaValidatorActionForm ">

   

 

 

 

    /createUser "

            type="com.cn.lively.action.CreateUserAction"

            name="userForm "/>

    /updateUser "

            type="com.cn.lively.action.UpdateUserAction"

            name="userForm "/>

 

 

配置validation.xml 文件:

 

   

/createUser ">

 

       

           

       

   

   

/updateUser ">

 

       

           

           

                                  position="1" />

           

                maxlength

                10

           

       

   

 

 

注: 注意validation.xml 文件中的/createUser /updateUser struts-config.xml 文件中actionpath 路径。

 

如果我们查看struts 源码,可以很清楚的看到ValidatorForm/ DynaValidatorForm ValidatorActionForm/ DynaValidatorActionForm 之间的区别

ValidatorForm 中的方法

* @return validation key - the form element's name in this case

public String getValidationKey(ActionMapping mapping,

        HttpServletRequest request) {

        return mapping.getAttribute();   // 返回formbean 的名字

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值