ActionForm

ActionForm用于封装用户的请求数据。即用户在页面上输入的数据。它充当了一个运输工具的角色。为了能够立体的理解ActionFrom。以下从两个角度看看:

    从封装的数据内容来看。通常实体对象是依据数据库的表来建立的,换句话说就是实体对象面对的是数据库。而ActionForm则面对的是界面上显示的数据。从作用来看。大家知道在没有引入Struts之前数据都是以页面上的元素为单位存放于Session或者request中。这种麻烦是取数据不方便。不够面向对象。

而ActionForm使得用户输入的和实体不正确应的数据也对象化了,以对象的方式存放在Session或者Request中。

ActionForm作用流程

通过一个时序图大概了解ActionForm的作用流程。由于没有先画类图,所以直接用文字描写叙述的。

多担待。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1b2ppYWppbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

作用域和生命周期

所谓生命周期就是ActionForm从创建到消亡的整个过程。从上面的时序图基本上也已经可以看个大概了。 ActionForm的生命周期有两种存在范围:request和session。

假设ActionForm存在于request范围,它仅在当前的请求生命周期中有效。

在请求从一个Web组件转发到还有一个Web组件的过程中,ActionForm实例一直有效。当server把响应结果返回给客户,ActionForm实例及其包括的数据就会被销毁。假设ActionForm存在于session范围,同一个ActionForm实例在整个HTTP会话中有效。也就是说仅仅要浏览器不关闭。session只是期。ActionForm就存在。

动态ActionForm

使用ActionForm能够给开发人员在处理HTML表单时带来极大的帮助,它简化了代码的编写,并提供了自己主动的数据验证。

可是,ActionForm也存在几个很明显的缺点。首先。假设ActionForm相应的HTML表单加入或删除一些属性,ActionForm类就可能须要改动并又一次编译。其次。假设HTML表单是动态的。那么ActionForm更是无能为力了;另外,ActionForm添加了项目中类的绝对数量!

    于是从Struts1.1起,就引入了动态ActionForm(DyanActionForm)概念。动态ActionForm使得用户无须为应用程序的每个HTML表单创建详细的ActionForm类。

Struts框架包中的DyanActionForm类及其子类实现了动态ActionForm。

配置动态ActionForm

动态ActionForm支持在Struts配置文件里完毕ActionForm的所有配置。无须编写不论什么额外的JAVA代码。

下面为演示样例:

      

<form-bean name="dynaFormForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="userName" type="java.lang.String" />
<form-property name="userPwd" type="java.lang.String" />
</form-bean>

题外话——VO/DTO:

    所谓的VO和DTO实际上就是两种传输数据对象,而ActionForm就是一种VO所以这里满引入这个内容。

  • VO :value object值对象 / view object表现层对象

  主要相应页面显示(web页面/swt、swing界面)的数据对象。能够和表相应,也能够不,这依据业务的须要。

在struts中,用ActionForm做VO,须要做一个转换,由于PO是面向对象的。而ActionForm是和view相应的,要将几个PO要显示的属性合成一个ActionForm。能够使用BeanUtils的copy方法。

  • DTO (TO) :Data Transfer Object传输数据对象

  用在须要跨进程或远程传输时。它不应该包括业务逻辑。比方一张表有100个字段,那么相应的PO就有100个属性(大多数情况下,DTO 内的数据来自多个表)。

但view层仅仅需显示10个字段,没有必要把整个PO对象传递到client,这时我们就能够用仅仅有这10个属性的DTO来数据传输到client。这样也不会暴露server端表结构。到达客户端以后,假设用这个对象来相应界面显示,那此时它的身份就转为VO。

总结:ActionForm 从用户输入端出发对数据做了一个封装,使得程序更加面向对象的。

它在运输中的作用!

版权声明:本文博主原创文章,博客,未经同意不得转载。

SSH-Struts(三)—ActionForm的更多相关文章

  1. struts(三)——struts框架实现登录示例

    前两篇讲解了struts框架的基本实现,自己感觉讲的也有些枯燥,今天拿登录的例子来做一个实现. 1.新建一个javaweb项目,并将struts的jar包拷贝到WebRoot/WEB-INF/lib下 ...

  2. SSH—Struts(三)—跑步者(Action)

    如已经描述Struts其基本原理和控制器ActionServlet,根据一个请求通过流ActionServlet之后就要到达Action类中做详细的处理了.ActionServlet通过ActionM ...

  3. SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别

    SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,M ...

  4. 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓

    hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提 ...

  5. 如何写一个SSH项目(三)如何进行交互的

    下面以登录为例子,展示从前台到后端的一整套流程并进行分析. 首先介绍一下我的SSH的分层结构 action和service一起是业务逻辑层          action层调用service层 dao ...

  6. 如何增加黑客通过ssh入侵的难度--保护ssh的三把锁

    源文档:https://blog.csdn.net/cnbird2008/article/details/6130696 简介 如果需要远程访问计算机并启用了 Secure Shell (SSH) 连 ...

  7. SSH(Struts、Spring、Hibernate)三大框架整合

    1. 新建数据库ssh_db -> 新建表user_tb(id为主键,自动递增) 2. 导入jar包(struts.hibernate 和 spring) 3. 注册页面reg.jsp,将表单的 ...

  8. 菜鸟学SSH(三)——Struts2国际化自动检测浏览器语言版

    前几天发了一篇Struts国际化的博客——<菜鸟学习SSH(二)——Struts2国际化手动切换版>,有网友提了一个意见,见下图: 于是就有了下面修改的版本: web.xml <?x ...

  9. [转] 浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓

      hibernate工作原理 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6 ...

  10. 保护SSH的三把锁

    ///////////////////////////////写在前面//////////////////////////////////////原帖地址:http://www.ibm.com/dev ...

随机推荐

  1. 一个Jquery特效(转)

    见证花开!!码上有花 先看效果 尝试点击,IE9+ 画心 清空 ... 请自由点击画布   创意来自于网络 可搜搜[程序员表白] 看上去像是[当耐特]的作品的加工版本 代码 当然要自己写了 能力有限, ...

  2. Android_declare-styleable_自己定义控件的属性

    1.简单实例 (1).在res/values文件下定义一个attrs.xml文件 <? xml version="1.0" encoding="utf-8" ...

  3. javascript---在自由落体实现

    实现一些简单的物业自由落体需要理解: clientHeight:浏览器客户机的整体高度 offsetHeight:物(实例div)高低 offsetTop:从对象client最顶层的距离 简单demo ...

  4. HDOJ 5147 Sequence II 树阵

    树阵: 每个号码的前面维修比其数数少,和大量的这后一种数比他的数字 再枚举每一个位置组合一下 Sequence II Time Limit: 5000/2500 MS (Java/Others)    ...

  5. Mac下改动Android Studio 所用的JDK版本号

    Mac下改动Android Studio 所用的JDK版本号 @author ASCE1885 近期项目从Eclipse+Ant构建模式转移到了Android Studio+Gradle构建模式.自然 ...

  6. iOS Foundation 框架基类

    iOS Foundation 框架基类 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转 ...

  7. asp.net使用mysql数据库

    Asp.net连接mysql 不推荐使用ODBC,推荐是用mysql官网提供的组件MySQL.Data.Dll,放在bin下面,添加引用即可 下面是封装的几个常用操作 using System; us ...

  8. C++类实现最大数的输出

    Description 判断整数的大小,输入n个数,找出最大的数并输出. Input 有多组测试实例,输入n,并输入n个数. Output 输出的最大的数,每个输出结果占一行. Sample Inpu ...

  9. MVC5 Entity Framework学习参加排序、筛选和排序功能

    上一篇文章实现Student 基本的实体CRUD操作.本文将展示如何Students Index页添加排序.筛选和分页功能. 以下是排序完成时.经过筛选和分页功能截图,您可以在列标题点击排序. 1.为 ...

  10. UVA 1411 - Ants(二分图完美匹配)

    UVA 1411 - Ants 题目链接 题意:给定一些黑点白点,要求一个黑点连接一个白点,而且全部线段都不相交 思路:二分图完美匹配,权值存负的欧几里得距离,这种话,相交肯定比不相交权值小,所以做一 ...