SSH-Struts(三)—ActionForm

    

ActionForm

    ActionForm用于封装用户的请求数据。即用户在页面上输入的数据。它充当了一个运输工具的角色。为了能够立体的理解ActionFrom。以下从两个角度看看:
    从封装的数据内容来看。通常实体对象是依据数据库的表来建立的,换句话说就是实体对象面对的是数据库。而ActionForm则面对的是界面上显示的数据。从作用来看。大家知道在没有引入Struts之前数据都是以页面上的元素为单位存放于Session或者request中。这种麻烦是取数据不方便。不够面向对象。

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

ActionForm作用流程

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

多担待。


作用域和生命周期

    所谓生命周期就是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 从用户输入端出发对数据做了一个封装,使得程序更加面向对象的。

它在运输中的作用!


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

原文地址:https://www.cnblogs.com/zfyouxi/p/4817477.html