Struts 学习笔记之ActionForm

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

① 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

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

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

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

ActionForm 的property必须声明然后才可以使用,不过在查询时我们常常需要输入一些查询条件,这些查询条件(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的全部配置,如:

DynaActionForm">

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

① 在struts-config.xml中设置action的validate属性为"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类继承含有validatorDynaValidatorForm

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

⑶ 配置validation.xml文件:

userForm">

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

关于arg的几个属性如下:

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

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

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

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

5 . 关于ValidatorForm/DynaValidatorFormValidatorActionForm/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类继承含有validatorDynaValidatorActionForm

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文件中action的path路径。

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

ValidatorForm 中的方法

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

public String getValidationKey(ActionMapping mapping,

HttpServletRequest request) {

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

}

原帖地址:http://wangyu.iteye.com/blog/194566

转载于:https://www.cnblogs.com/Overbord/archive/2012/07/23/2605287.html

Struts 学习笔记之ActionForm相关推荐

  1. Struts学习笔记总结

    Struts学习笔记总结 一.Struts是由Apache开源联盟提供的一套用于构建 Java web应用程序的框架,它的目标是希望分离Web程序的表示层.控制层和模型层,即MVC框架,使程序员将更多 ...

  2. Struts学习笔记--(二)Struts基础

    本文为how2java Struts教程的学习笔记,原教程链接如下:http://how2j.cn/k/struts/struts-jsp/55.html 中文问题 修改addProductjsp 修 ...

  3. struts学习笔记三-国际化

    在程序设计领域,人们把能够在无需改写有关代码的前提下,让开发出来的应用程序能够支持多种语言和数据格式的技术称为国际化技术. 国际化简称为 i18n,根据internationalization简化而来 ...

  4. Struts 学习笔记1 -Struts Framework 概览

    作者: bruce -- Java研究组织 Tuesday, January 21 2003 11:06 AM Struts开始于2000年3月,1.0在2001年7月发布.采用Struts能开发出基 ...

  5. Struts 学习笔记2(输入校验、国际化、异常处理)

    项目文件结构 项目源文件下载地址:http://dl.dbank.com/c05qyg3yir Struts2的输入校验 Struts2输入校验.执行流程: 1)首先进行类型转换 2)然后进行输入校验 ...

  6. Struts学习笔记_i18n

    1.    I18N原理 a)         ResourceBundle和Locale的概念 b)         资源文件 c)         native2ascii //test.java ...

  7. Struts学习笔记--导航

    Struts入门 JSTL入门 Struts标签入门 Struts使用细节

  8. struts学习笔记(一):Struts相关基础理论介绍

    为什么使用struts 建立在MVC这种公认的好的模式上的,Struts在M.V和C上都有涉及,但它主要是提供一个好的控制器和一套定制的标签库上,也就是说它的着力点在C和V上,有MVC的一系列优点,如 ...

  9. STRUTS学习笔记

    Struts工作原理图 首先新建动态Web项目,如何在web.xml文件中配置过滤器,在struts.xml文件中配置action,编写action执行的函数,编写 函数执行完成后跳转的jsp 显示数 ...

  10. Struts2框架学习笔记_Struts2入门

    文章为学习struts的笔记,可供读者参考,有不足之处还望之指出. 参考: POJO与JavaBean的区别 Velocity Velocity官网 FreeMarker XSLT struts2 学 ...

最新文章

  1. R多变量相关性分析及相关性可视化
  2. linux c 笔记 文件(三)
  3. 编写微指令 计算机组成,计算机组成原理微指令实验报告
  4. lvs十种调度策略+三种模式
  5. Javascript继承4:洁净的继承者----原型式继承
  6. 葬身李刚儿子车轮下的漂亮女孩
  7. jboss fuse 教程_IDC关于使用JBoss Fuse的商业价值的报告(与Apache Camel一起使用)
  8. 【C++ Priemr | 15】虚函数表剖析(二)
  9. 点击回车事件(登录)
  10. 14.深度学习练习:Face Recognition for the Happy House
  11. 35 岁之前不应该错过的 30 本书
  12. Keras深度学习实战(1)——神经网络基础与模型训练过程详解
  13. nodejs连接mysql哪个版本_nodejs连接mysql
  14. Java实现简单图书管理系统
  15. 开源开放 | OpenKG发布cnSchema重构版本
  16. 配置Skype for business 2015混合部署
  17. 图像分割—基于区域的图像分割
  18. C#中Winform操作百度地图
  19. CSS3实现边框线条动画特效
  20. lol云顶之奕助手_LOL云顶之弈助手app下载-LOL云顶之弈助手官网版下载v1.1.2-FC游戏网...

热门文章

  1. c语言指针实验报告总结,指针(C语言实验报告).doc
  2. C# 读取oracle 中文乱码的解决方案
  3. Hydra暴力破解smb协议(Windows用户名和密码)
  4. 联想笔记本电脑整机拆解
  5. 光纤与光通信-基础知识
  6. PCBLayout相关注意事项和常见问题
  7. 音乐播放器——SoundManager API介绍
  8. 高一计算机教学总结怎么写,高一信息技术教学工作总结
  9. WinCC语音报警实现方法
  10. renderTo和applyTo的区别