ActionForm

ActionForm用于封装用户的请求参数,而请求参数是通过JSP页面的表单域传递过来的。因此应保证ActionForm的参数,与表单域的名字相同。

ActionForm的作用机理:


  ActionForm本质上是一种JavaBean,是专门用来传递表单数据的DTO(Data Transfer Object,数据传递对象)。它包括用于表单数据验证的validate()方法和用于数据复位的reset()方法。
  Struts框架利用ActionForm对象来临时存放视图页面中的表单数据。例如,一个登录页面会有一个用户名输入框和一个密码输入框,以及用来提交登录请求的按扭。当用户提交登录请求后,Struts将 用户名和密码两个输入域的数据自动填充到相应的ActionForm对象中,然后控制层可以从该ActionForm对象中读取用户输入的表单数据,也可以把来自模型层的数据存放到ActionForm中,然后返回给视图显示。
  ActionForm有(request)和(session)两种作用域(scope)。如果ActionForm的作用域设定为request,ActionForm实例将保存在request对象中,像其他保存在request对象中的属性一样,仅在当前请求范围内有效。如果ActionForm的作用域设定为session,那么ActionForm实例将被保存在session对象中,同一个ActionForm实例在整个HTTP会话中有效。

ActionForm配置

所有的ActionForm都被配置在struts-config.xml文件中,该文件包括了一个form-beans的元素,
该元素内定义了所有ActionForm,每个ActionForm对应一个form-bean元素。
----------------------------摘自百度百科

一:什么是ActionForm

ActionForm可以从下面四点理解它

  1.ActionForm表示Http窗体的数据,也就是咱们页面表单数据收集器,可以看作是模型和视图的中介,他负责保存表单中的数据供模型或者视图使用,只能通过ActionForm验证的数据才能发送到Action处理。

  2.ActionForm是一个或者多个ActionConfig关联的JavaBean,在相应的Action的execute方法调用之前,ActionForm会利用请求参数填充自己。

  3.ActionForm是一个抽象类,我们在用的时候必须继承它才行。

二:ActionForm的功能和用法

  1. 获取保存表单参数,ActionForm利用自己的get和set方法来实例化自己,初始化完成以后,并且对表单中的数据,转换成我们预先定义的数据类型。
  2. 验证表单数据,ActionForm验证表单数据。验证表单数据的方法大体分为两种类型,一种是在服务端验证,一种也可以利用javaScript在客户端验证。验证就需要两个ActionForm的特殊类,也就是Struts给我们已经提供好的两个有用的ActionForm。一个是DynaActoinForm,另一个是DynaValidatorForm类。下面分别介绍一下。

三:两个特殊的ActionForm

DynaActionForm类,这个类出现的目的是为了减少系统中的ActionForm的数量,因为ActionForm负责收集表单中的数据,如果表单多了以后,就会导致ActionForm的数量急剧增加,而我们看到王勇视频中,看起来就一两个ActionForm,是因为他演示的功能很少,表单中基本上就是一项物料的信息,但是真正的项目中中绝对不是这样的,也许一个页面就可能设计到很多表单,一个项目的表单那就更多了。这样怎么办呢?DynaActionForm解决了这个问题,它可以让我们不必要创建具体的ActionForm类,而在配置文件中  用"org.apache.struts.action.DynaActionForm"来创建一个动态的ActionForm。比如下面的登录ActionForm

  1. <form-beans>
  2. <form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm">
  3. <form-property name="actionClass" type="java.lang.String"/>
  4. <form-property name="username" type="java.lang.String"/>
  5. <form-property name="password" type="java.lang.String"/>
  6. </form-bean>
  7. </form-beans>

动态的 ActionForm的使用方法跟普通的 ActionForm 相同,但是要注意一点。普通的 ActionForm 对象需要为每个属性提供 getter 和 setter方法,以上面的例子而言,我们需要提供 getUsername() 和 setUsername() 方法取得和设置 username属性,同样地有一对方法用于取得和设置 password 属性和 actionClass 属性。

如果使用DynaActionForm,它将属性保存在一个 HashMap 类对象中,同时提供相应的 get(name) 和 set(name) 方法,其中参数name 是要访问的属性名。例如要访问 DynaActionForm 中 username 的值,可以采用类似的代码:

  1. String username = (String)form.get("username");

由于值放到一个HashMap对象里面,必须对使用给的值做动态的转换才行,所以不是所有的ActionForm都适合动态,对应经常使用的ActionForm还是建议使用普通ActionForm的。
DynaValidatorForm类

它是DynaActionForm的一个子类,能够对表单数据进行验证,使用他首先要配置,然后在定义插件:

  1. <form-beans>
  2. <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">
  3. <form-property name="actionClass" type="java.lang.String"/>
  4. <form-property name="username" type="java.lang.String"/>
  5. <form-property name="password" type="java.lang.String"/>
  6. </form-bean>
  7. </form-beans>
  1. <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
  2. <set-property property="pathnames"
  3. value="/WEB-INF/validator-rules.xml,
  4. /WEB-INF/validation.xml"/>
  5. </plug-in>

其中的validator.xml 和 validator-rules.xml 分别表示验证定义和验证规则的内容(可以合并在一起)。验证规则可以我们自己定义。使用xml文件定义。这里就不再写定义规则了。

Struts 将根据 xml配置文件中的定义来检验表单输入,并将不符合要求的错误信息输出到页面。但是你可能会想:这个功能虽然好,可是什么检验都跑到服务器端执行,效率方面和用户易用性方面是不是有些问题?你可能会怀念起那简单的JavaScript 客户端验证。

我们不用担心,在 Struts 中也支持javascript 客户端验证。如果你选择了客户端验证,当某个表单被提交以后,Struts 启动客户端验证,如果浏览器不支持 JavaScript验证,则服务器端验证被启动,这种双重验证机制能够最大限度地满足各种开发者的需要。JavaScript 验证代码也是在 validator-rules.xml文件中定义的。

转载于:https://www.cnblogs.com/guoziyi/p/7054262.html

Struts功能详解——ActionForm相关推荐

  1. IOS视频编辑功能详解上篇-添加水印

    前言 用代码在简单视频编辑中,主要就是加美颜.水印(贴图).视频截取.视频拼接.音视频的处理,在美颜中,使用GPUImage即可实现多种滤镜.磨皮美颜的功能,并且可以脸部识别实时美颜等功能,这个有很多 ...

  2. redis stream持久化_Beetlex.Redis之Stream功能详解

    原标题:Beetlex.Redis之Stream功能详解 有一段时间没有写文章,techempower的测试规则评分竟然发生了变化,只能忘着补充一下占比权重最多的数据更新示例了和深入设计一下组件模块化 ...

  3. endnotex7怎么导入中文文献_EndNote X7自动导入PDF功能详解 | 科研动力

    在Endnote X7 新功能简介一文中对于EndNote X7的自动导入PDF功能作了一简要介绍,但是有些人对于EndNote自动导入PDF的功能还是有疑问,本文就EndNote如何自动导入PDF功 ...

  4. Linux下的tar归档及解压缩功能详解

    Linux下的tar归档及解压缩功能详解 一.Linux下解压缩工具 二.gzip工具的使用方法 三.其他解压缩工具 一.Linux下解压缩工具 二.gzip工具的使用方法 三.其他解压缩工具 一.L ...

  5. 【转载】Linux命令-自动挂载文件/etc/fstab功能详解[转]

    博客园 首页 新随笔 联系 订阅 管理 随笔 - 322  文章 - 0  评论 - 19 Linux命令-自动挂载文件/etc/fstab功能详解[转]     一./etc/fstab文件的作用 ...

  6. ASP中利用OWC控件实现图表功能详解[zz]

    ASP中利用OWC控件实现图表功能详解 在ASP中利用OWC(Office Web Components)控件可轻松实现各种图表功能,如饼图,簇状柱型图,折线图等. 在下面的代码中我详细的给出了饼图, ...

  7. python编程用户登陆c_django实现用户登陆功能详解

    简介: Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架,由Python ...

  8. fan4801开关电源原理图_开关电源原理图各元件功能详解

    CX1(X-Cap) . RX1: 电源原理图 -- 每个元器件的功能详解 ! 由变压器计算得到 lin 值,以此 lin 值 ( 0.42A ) 可知使用公司共享料 2A/250V , 设计时亦须考 ...

  9. java 8 新功能详解_Java 8和Java 14之间的新功能

    java 8 新功能详解 从版本9开始,Java每6个月就有一次新功能,因此很难跟踪这些新更改. 互联网上的大多数信息都描述了最近2个Java版本之间的变化. 但是,如果您的情况与我相似,则说明您使用 ...

  10. java 8 新功能详解_Java 8的8个新功能

    java 8 新功能详解 注意:确保还检查了我们的详细教程Java 8 Features – ULTIMATE Guide . Jdk 1.8(又名Java 8)今天发布,这意味着它的通用发布版本已经 ...

最新文章

  1. asp+Access程序在Windows Server 2003 Enterprise Edition服务器上运行时无法显示备注字段的解决方法...
  2. IOS内存的一篇文章
  3. boost::gil::detail::is_channel_integral用法的测试程序
  4. 为什么需要用户自定义类加载器及具体实现
  5. 数据结构与算法-----冒泡排序
  6. webdriver 爬虫 java_java爬虫通过selenium+WebDriver遍历页面链接报错
  7. java 配置嵌套事务_Spring 事务嵌套的配置
  8. Dubbo(七)使用SpringBoot搭建dubbo消费者工程
  9. php 点击下拉显示内容,php+ajax实现仿百度查询下拉内容功能示例
  10. cello 有关状态
  11. 6月14号=》136页-145页
  12. 批处理一键创建局域网共享文件夹或文件共享轻松访问Win系统其他电脑的共享文件命令行(纯bat代码)实用便携~
  13. 华为盒子 原生android,华为悦盒/各种安卓盒子找回原生设置以及适配蓝牙遥控器...
  14. 银联二维码支付java 实现
  15. 2022保研,我的心路历程(上科大上海交大华南理工)
  16. Spring IOC(一):概述
  17. 计算机网络协议有那些,计算机网络协议有哪些
  18. [UNR #6]机器人表演
  19. Pycharm新手使用教程(详解)
  20. 2020宁波市多校赛训练biu~

热门文章

  1. 泛函分析 第二章 线性算子与线性泛函
  2. 软件过程模型(详解)
  3. Labview温度采集系统
  4. Java用户管理系统
  5. RS485通信和Modbus通信协议
  6. Echarts风向玫瑰图
  7. python之windrose风向玫瑰图的用法
  8. 单片机炫彩灯实训报告_基于51单片机的流水灯实训报告.doc
  9. 10KV变配电增容工程电力监控系统的设计与应用
  10. 电赛总结(二)——AD芯片总结之AD7705