Struts架构中,ActionForm负责记录和维护视图中的数据,提供Model(模型层)和View(视图层)使用,因此可疑将它看作是模型和视图之间的中介.如果需要,还可疑启动ActionForm对数据实现验证及过滤功能,即只有通过ActionForm验证的数据才能够发送到ActionBean进行后续处理.
ActionForm是一种特殊的JavaBean,控制器组件RequestProcessor利用其属性存取方法setter/getterXXX()实现初始话.在初始化完毕后,还能调用它的validate()方法来对请求参数进行验证,通常是检查数据格式是否合法,并在验证失败的时候通过错误管理机制加以处理.
但是ActionForm本身也存在一个缺点:由于ActionForm对应于Http请求表单,所以在开发设计大型Struts应用时,随着页面和请求表单数目的增多,Struts应用程序中需要定义打量的ActionForm类.此外,同一类型的表单字段可能出现在不同表单,进而出现在多个ActionForm中,这会造成多个ActionForm类之间不能共用相同的验证代码,例如:在登录页面中有用户和密码字段,而在注册页面童谣也有密码和用户字段.其对应的名称及操作应该是类似的.
当然可疑考虑开发一个巨大的ActionForm类,使之同时对应多个表单,但这种过强的聚合性会导致代码更难以维护和重用.
为了彻底解决这种问题,Struts1.1中提出了动态ActionForm(DynaActionForm),同时也提供了Validator验证框架实现动态验证表单(DynaValidatorForm)的功能.
实际上,引入动态表单DynaActionForm的目的在于减少ActionForm的数目,因此也常将ActionForm称为静态表单以示区别.

在上一篇文中,我提到了系统自定义的form这样一个说法,其实不准确。准确地说,我是使用了动态form。

在动态ActionForm声明的时候,属性tpye的值是struts提供的org.apache.struts.action.DynaActionForm
struts会自动调用这个类来进行封装,所以只要在*.xml文件里配置好就可以了,不用再写一个继承ActionForm的类。

动态ActionForm的优点是:如果在页面上添加了一个request(例如:让用户输入信息的文本框)的话,直接改*.xml文件就可以了,而静态ActionForm就要再编译.java文件,重启服务器才能有效。

缺点是:不能在*.jsp文件中用EL语句了(${}),如果要在*.jsp页面上用到form的话,就要在Action类的execute()方法中进行强转:
DynaActionForm dForm = (DynaActionForm)form;

然后用DynaActionForm中的get()方法,方法中传<form-property/>标签中属性name的值来获得封装request的数据。如果页面多的话,代码量会非常的大,所以一般在实际项目中都不会用到动态ActionForm。

下面是我自己写的一个伪代码:
作用是在struts-config.xml配置了一个动态ActionForm,然后通过Action类把form转发到页面上。

struts-config.xml的配置:
<form-bean type="org.apache.struts.action.DynaActionForm">
<form-property type="java.lang.String"/>
</form-bean>

Action类中:
DynaActionForm dForm = (DynaActionForm)form;
String dName = (String)dForm.get("name");
request.setAttribute("name",dName);
return mapping.findForward("view");

http://kwor.blog.163.com/blog/static/1296224112009102345327127/

Struts中动态ActionForm与静态ActionForm有什么区别?_相关推荐

  1. JSP中动态includ与静态includ的区别

    JSP中动态INCLUDE与静态INCLUDE的区别? 动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" ...

  2. jsp中动态include与静态include的区别

    JSP中动态INCLUDE与静态INCLUDE的区别 动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" f ...

  3. Linux系统中动态库和静态库的区别

    Linux系统中"动态库"和"静态库"那点事儿 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源 ...

  4. 静态ip和动态ip的区别_动态IP和静态IP有哪些区别?

    代理IP的动态IP和静态IP有什么区别?现在还有许多人在问. 简单说动态IP会发生变化,像工号,到不同的公司你会得到不同的工号:而静态IP是不变的,和身份证号一样.这里神鸡IP代理来给大家详细说下. ...

  5. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

  6. 动态网页和静态网页之间的区别?

    静态网页和静态网页的区别: 程序是否在服务器端运行,是重要标志.在服务器端运行的程序.网页.组件,属于动态网页,它们会随不同客户.不同时间,返回不同的网页.运行于客户端的程序.网页.插件.组件,属于静 ...

  7. 你知道动态IP和静态IP的真正区别吗?点击查看详细解析!

    一.动态IP和静态IP的基本概念 二.动态IP和静态IP的区别 三.动态IP和静态IP各自的优势 四.动态IP和静态IP的应用场景 五.总结 Aorta Cloud 厦门主动脉云科技 一.动态IP和静 ...

  8. 5.jsp中动态include与静态include的区别

    动态include在使用的时候,会先解析所要包含的页面(你例子中的included.jsp),解析后在和主页面放到一起显示:静态INCLUDE在使用的时候,不会解析所要包含的页面(你例子中的inclu ...

  9. QT中动态库和静态库使用

    软件版本:QT5.12.0 + Qt Creator4.8.0 动态链接 动态链接库又叫"共享库",即sharedLib. Qt Creator中新建项目,选择"Libr ...

  10. 简述linux中动态库和静态库的制作调用流程

    假设现在有这些文件:sub.c add.c div.c mul.c mainc head.h(前4个.C文件的头文件) 1.静态库制作流程         gcc -c  sub.c add.c di ...

最新文章

  1. 如何在linux服务器上使用hanlp
  2. pandas to_dict 的用法
  3. POJ - 3342 Party at Hali-Bula(树形dp)
  4. 帝国CMS后台getshell
  5. 剖析Caffe源码之Layer_factory
  6. 同一列两行数据怎么合并成一行_经常加班怎么办?两分钟学会这4招,让同事刮目相看!...
  7. [转载]JAVA操作符
  8. ubuntu16.04安装谷歌拼音输入法并可在QtCreator中使用
  9. 2022-2023中国整体薪酬趋势
  10. Unity基础案例讲解:创建小型太空射击游戏(一)
  11. 白帽子讲Web安全(第 1 章 我的安全世界观)
  12. windows安全事件查看及安全事件id汇总
  13. python opencv入门 鼠标绘图(4)
  14. 关于四叶玫瑰花数的问题
  15. 2021-03-21
  16. 谷歌学术的搜索原理_谷歌搜索引擎产品的工作原理研究
  17. 多线程(之五:线程协作)
  18. 录音转文字,怎么把手机录音转文字
  19. [计算机组成原理(谭志虎 微课版)]第一章 计算机系统概述(课后习题[习题1]+答案解析)
  20. linux amd显卡使用情况查看

热门文章

  1. 雨听 | iOS快捷指令之免费观看全网免费视频
  2. vim - 之快速删除指定符号的内容
  3. c语言函数字符传送,C语言中send()函数和sendto()函数的使用方法
  4. 计算机网课课堂评价语,网络授课如何“高效”评价学生作业(附实用评语)
  5. x509证书有效期校验过程_基于TLS1.2(GmSSL)
  6. 经纬度坐标相互转换度分秒
  7. 联想z510笔记本拆机
  8. 联想计算机电源风扇怎样清理,电脑怎么清灰加硅脂 联想笔记本清灰换硅脂图文教程...
  9. Python、PyGame游戏项目
  10. plc无线连接服务器,plc连接云服务器