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. CSS 初探

    Css: 指层叠样式表 (Cascading Style Sheets),它是用来进行网页风格设计的.通俗的说就是进行网页美化的,没有html依然存在,多了css 它会更好.但是没有html,css就 ...

  2. Android:自己定义PopupMenu的样式(显示图标/设置RadioButton图标)

    PopupMenu是Android中一个十分轻量级的组件.与PopupWindow相比,PopupMenu的可自己定义的能力较小,但使用更加方便. 先上效果图: 本例要实现的功能例如以下: 1.强制显 ...

  3. 自己定义actionbar

    android中的actionbar可提供自己定义view.详细是先写好自己定义view的布局,然后在代码中获取Actionbar对象.调用 setCustomView方法. 可是这样,它还是会显示前 ...

  4. django1.7 配置demo教程(环境搭建)

    近期又用到django做个简单项目,1年多没用过了有些手生,按理说没啥问题吧 以下是一个简单的环境搭建demo过程: 前提条件:准备了python2.7已经安装 1.搭建django环境下载 http ...

  5. DV工作流

  6. SQLSERVER2014的内存优化表

    SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技术来支持大规模OLTP工作负载. 就算如此, ...

  7. 重写ViewPager实施单一交有关切换到这个问题,并没有缓存

    我们需要解决这个问题:切换时,可以实现单独的消息到左和右,但我不知道的情况下根据岗位总数.只是不知道ViewPagerAdapter的getCount数量. 因为帖子内容的数据图片和布局比較复杂.所以 ...

  8. 删CentOS / RHEL库和配置文件(Repositories and configuraiton files)

    1 删除库简介 随着root权限执行以下的命令: # cd /etc/yum.repos.d/ 列出全部库(repo) #ls CentOS-Base.repo epel.repo mirrors-r ...

  9. uboot的relocation原理具体分析

    近期在一直在做uboot的移植工作,uboot中有非常多值得学习的东西.之前总结过uboot的启动流程,但uboot一个非常核心的功能没有细致研究.就是uboot的relocation功能. 这几天研 ...

  10. iOS的图表显示的实现

    在app通常有家居展览的照片,显示广告.或者头条新闻.通常网易新闻client 如图,红框框的位置就是一个典型的图展, 熟悉iOS的人肯定知道,这个是个UIScrollview,里面加几张图片就可以实 ...