Struts功能详解——ActionForm
-
ActionForm
ActionForm的作用机理:
Struts框架利用ActionForm对象来临时存放视图页面中的表单数据。例如,一个登录页面会有一个用户名输入框和一个密码输入框,以及用来提交登录请求的按扭。当用户提交登录请求后,Struts将 用户名和密码两个输入域的数据自动填充到相应的ActionForm对象中,然后控制层可以从该ActionForm对象中读取用户输入的表单数据,也可以把来自模型层的数据存放到ActionForm中,然后返回给视图显示。
ActionForm有(request)和(session)两种作用域(scope)。如果ActionForm的作用域设定为request,ActionForm实例将保存在request对象中,像其他保存在request对象中的属性一样,仅在当前请求范围内有效。如果ActionForm的作用域设定为session,那么ActionForm实例将被保存在session对象中,同一个ActionForm实例在整个HTTP会话中有效。
ActionForm配置
一:什么是ActionForm
ActionForm可以从下面四点理解它
1.ActionForm表示Http窗体的数据,也就是咱们页面表单数据收集器,可以看作是模型和视图的中介,他负责保存表单中的数据供模型或者视图使用,只能通过ActionForm验证的数据才能发送到Action处理。
2.ActionForm是一个或者多个ActionConfig关联的JavaBean,在相应的Action的execute方法调用之前,ActionForm会利用请求参数填充自己。
3.ActionForm是一个抽象类,我们在用的时候必须继承它才行。
二:ActionForm的功能和用法
- 获取保存表单参数,ActionForm利用自己的get和set方法来实例化自己,初始化完成以后,并且对表单中的数据,转换成我们预先定义的数据类型。
- 验证表单数据,ActionForm验证表单数据。验证表单数据的方法大体分为两种类型,一种是在服务端验证,一种也可以利用javaScript在客户端验证。验证就需要两个ActionForm的特殊类,也就是Struts给我们已经提供好的两个有用的ActionForm。一个是DynaActoinForm,另一个是DynaValidatorForm类。下面分别介绍一下。
三:两个特殊的ActionForm
DynaActionForm类,这个类出现的目的是为了减少系统中的ActionForm的数量,因为ActionForm负责收集表单中的数据,如果表单多了以后,就会导致ActionForm的数量急剧增加,而我们看到王勇视频中,看起来就一两个ActionForm,是因为他演示的功能很少,表单中基本上就是一项物料的信息,但是真正的项目中中绝对不是这样的,也许一个页面就可能设计到很多表单,一个项目的表单那就更多了。这样怎么办呢?DynaActionForm解决了这个问题,它可以让我们不必要创建具体的ActionForm类,而在配置文件中 用"org.apache.struts.action.DynaActionForm"来创建一个动态的ActionForm。比如下面的登录ActionForm
- <form-beans>
- <form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm">
- <form-property name="actionClass" type="java.lang.String"/>
- <form-property name="username" type="java.lang.String"/>
- <form-property name="password" type="java.lang.String"/>
- </form-bean>
- </form-beans>
动态的 ActionForm的使用方法跟普通的 ActionForm 相同,但是要注意一点。普通的 ActionForm 对象需要为每个属性提供 getter 和 setter方法,以上面的例子而言,我们需要提供 getUsername() 和 setUsername() 方法取得和设置 username属性,同样地有一对方法用于取得和设置 password 属性和 actionClass 属性。
如果使用DynaActionForm,它将属性保存在一个 HashMap 类对象中,同时提供相应的 get(name) 和 set(name) 方法,其中参数name 是要访问的属性名。例如要访问 DynaActionForm 中 username 的值,可以采用类似的代码:
- String username = (String)form.get("username");
由于值放到一个HashMap对象里面,必须对使用给的值做动态的转换才行,所以不是所有的ActionForm都适合动态,对应经常使用的ActionForm还是建议使用普通ActionForm的。
DynaValidatorForm类
它是DynaActionForm的一个子类,能够对表单数据进行验证,使用他首先要配置,然后在定义插件:
- <form-beans>
- <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">
- <form-property name="actionClass" type="java.lang.String"/>
- <form-property name="username" type="java.lang.String"/>
- <form-property name="password" type="java.lang.String"/>
- </form-bean>
- </form-beans>
- <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
- <set-property property="pathnames"
- value="/WEB-INF/validator-rules.xml,
- /WEB-INF/validation.xml"/>
- </plug-in>
其中的validator.xml 和 validator-rules.xml 分别表示验证定义和验证规则的内容(可以合并在一起)。验证规则可以我们自己定义。使用xml文件定义。这里就不再写定义规则了。
Struts 将根据 xml配置文件中的定义来检验表单输入,并将不符合要求的错误信息输出到页面。但是你可能会想:这个功能虽然好,可是什么检验都跑到服务器端执行,效率方面和用户易用性方面是不是有些问题?你可能会怀念起那简单的JavaScript 客户端验证。
我们不用担心,在 Struts 中也支持javascript 客户端验证。如果你选择了客户端验证,当某个表单被提交以后,Struts 启动客户端验证,如果浏览器不支持 JavaScript验证,则服务器端验证被启动,这种双重验证机制能够最大限度地满足各种开发者的需要。JavaScript 验证代码也是在 validator-rules.xml文件中定义的。
Struts功能详解——ActionForm的更多相关文章
- Struts功能详解——ActionMapping对象
Struts功能详解——ActionMapping对象 ActionMapping描述了struts中用户请求路径和Action的映射关系,在struts中每个ActionMapping都是通过pat ...
- Struts功能详解 ——ActionServlet
ActionServlet类是Struts框架的内置核心控制器组件,它继承了javax.servlet.http.HttpServlet类.Struts的启动通常从 加载ActionServlet开始 ...
- Struts功能详解——ValidatorForm
ActionForm和ValidatorForm区别: 一个Form继承了ValidatorForm 就不用写具体的验证,但是需要提供:validation-rules.xml 和 val ...
- iOS之UI--使用SWRevealViewController实现侧边菜单功能详解实例
使用SWRevealViewController实现侧边菜单功能详解 下面通过两种方法详解SWRevealViewController实现侧边菜单功能: 1.使用StoryBoard实现 2.纯代 ...
- SVN功能详解
SVN功能详解 TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具.通过使用它,我们可以可视化的管理我们的版本库.不过由于它只是一个客户端,所以它不能对版本库进行权限管理. ...
- 转载]IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本 )
原文地址:IOS LBS功能详解[0](获取经纬度)[1](获取当前地理位置文本作者:佐佐木小次郎 因为最近项目上要用有关LBS的功能.于是我便做一下预研. 一般说来LBS功能一般分为两块:一块是地理 ...
- UIViewController中各方法调用顺序及功能详解
UIViewController中各方法调用顺序及功能详解 UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, ...
- MySQL的用户密码过期功能详解
MySQL的用户密码过期功能详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 先说明两个术语. Payment Ca ...
- 【转】 /etc/fstab功能详解
[转] /etc/fstab功能详解 最近去客户现场时,遇到 了一个关于挂载文件/etc/fstab文件的问题,就写了一下/etc/fstab文件的作用一个文件中各个参数的含义.供大家参考有不正确的地 ...
随机推荐
- 前端学习(十四)js回顾和定时器(笔记)
回顾知识点: 作用域: 1.全局变量:在任何位置都可以使用的变量 2.局部变量:只能在函数内部使用的变量 3.闭包:子函数可以使用父函数的局部变量 -- ...
- java中this和super关键字的作用
this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题:this可以调用成员变量,不能调用局部变量:this也可以调用成员方法,但是在普通方法中可以省略this,在构造方法中不允许省 ...
- 配置文件--spring cloud Config
配置中心--Spring cloud Config 通过本次学习,我们应该掌握: Config Server 读取配置文 Config Server 从远程 Git 仓库读取配置文 搭建芮可用 Con ...
- 弹窗的图片画廊lightslider插件
需要这三个文件
- Delphi max函数和min函数
uses单元 math: min函数 min(A,B); 比较A.B的大小,取最小值 max函数 min(A,B); 比较A.B的大小,取最大值 原型示例:function Min(const A ...
- git——创建分支后,切换分支报错(error: pathspec 'master' did not match any file(s) known to git)
error: pathspec 'master' did not match any file(s) known to git 解决办法: 1.查看分支 git branch -a 2.获取所有分支 ...
- HDU6333 求组合数前m项的和
目录 分块 莫队 @ HDU6333:传送门 题意:求组合数前m项的和. 在线分块or离线莫队 分块 重要的一个定理: \[C_{n}^{m} = 0\;\;m > n\] \[C_{n}^{m ...
- Core Dump总结
Core Dump总结 查看现在系统dump core的情况 ulimit -c 结果表示core文件的大小.如果显示0,则不会dump core,显示unlimited不限制core文件大小 打开d ...
- 敏捷在《PMBOK指南》知识领域中的应用
<PMOBOK指南>知识领域 敏捷工作过程中的应用 第四章 项目整合管理 迭代和敏捷方法能够促进团队成员以相关领域专家的身份参与整合管理.团队成员自行决定计划及其组件的整合方式.在适应型环 ...
- 【hive 日期函数】Hive常用日期函数整理
1.to_date:日期时间转日期函数 select to_date('2015-04-02 13:34:12');输出:2015-04-02122.from_unixtime:转化unix时间戳到当 ...