Struts快速入门(五完)

原创 2003年05月13日 11:02:00

FormTag初始化ActionForm对象<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

       本节早前提到,HTML表单中动作URL被映射到一个<action>配置,并轮流被映射到一个<form-bean>配置。FormTag中由action属性制定的URLFormTag转换为一个在部署描述符中<url-pattern>确定的路径结构URL。对于扩充的映射,这意味着资源扩展和<url-pattern>指定的一样。因此,一个表单URL editCustomerProfile?customerType=preferred被转换为/editCustomerProfile.do?customerType=preferredFormTag调用RequestUtils.createActionForm(…)方法,查找一个ActionFormBean配置对象(ActionFormBean <formbean>元素的运行时表现),其名称匹配指定的相应<action>的名称。一个新的ActionForm实例使用<form-bean>元素type属性被建立;当ActionForm实例在指定的活动范围内未找到时,一个新的实例被建立,否则FormTag调用已存在的表单beanActionForm.reset(…)方法以清除并准备接受下一个请求的表单数据。该活动范围被<action>元素中scope属性所指定;新ActionForm实例或已存在的重新初始化的实例被使用name属性保存在指定的活动范围内

 

ActionForm保存表单数据

       ActionForm派生的对象用于保存请求对象的参数,因此它们和用户紧密联系。一个ActionForm的子类是一个拥有存取HttpServletRequest对象参数属性的方法JavaBean。如果ActionForm对象被FormTag建立,那么在后来的FormTag表单翻译请求中,RequestProcessor将从制定的活动范围访问表单;欲取得的表单被相关的动作映射所标识。RequestProcessor将随后重新安排表单属性,用请求时参数填充表单,随即调用表单对象的validate(…)方法以履行服务器端用户输入验证。仅当ActionMapping对象中validate属性被设为true时,validate(…)方法被调用;这就是默认的行为。request.getParameterValues(parameterName)被用于得到一个String[]对象,它用来表单填充;验证的结果应该是一个ActionErrors对象,用org.apache.struts.taglib.html.ErrorsTag来显示验证错误给用户。ActionForm也可以被用于为当前用户保存即将被一个视图引用的中间模型状态。

 

       一个ActionForm类也可以被RequestProcessor建立。这是发生在已完成向前进到一个URL,该URL为映射到控制器servlet而不是JSP和相应的动作映射指定的表单属性的。在这个情况下,如果没有在指定的活动范围内找到,RequestProcessor将尝试寻找可能导致创建一个新ActionForm对象的表单bean。该ActionForm对象在指定的活动范围内被用<action>元素的name属性找到;当一个表单对象被RequestProcessor找到,它被传递到请求处理器的execute(…)方法。一个ActionForm对象也可以被请求处理器建立。表单对象建立目的是提供中间模型状态给使用请求范围JSP;这将确保对象不会在有效性过期后仍然存在。默认的,所有的表单都被保存为会话范围。会话中表单对象脱离有效性的存在可能导致浪费内存,同样的,请求处理器必须跟踪保存在会话中的表单对象的生命周期。一个好的捕获表单数据的实践是为横跨多用户交互的相关表单用一个单独的表单bean表单bean也可以在反馈的时候用来储存能够被自定义标签改变的中间模型状态。在视图中标签用法避免结合Java代码,因此要成一个好的任务划分,web生产组主要处理标志,而应用开发组主要处理Java代码。标签因素退出访问中间模型状态的逻辑;当访问嵌套的对象或当通过聚集列举时这个逻辑可能很复杂。

 

用动态属性建立ActionForm

       一个DynaActionForm对象是一个拥有动态属性集合的对象。DynaActionForm扩展了ActionForm,它的用法允许通过在struts-config.xml声明建立一个表单对象,如下:

<form-bean name="logonForm"

type="org.apache.struts.action.DynaActionForm">

<form-property name="username" type="java.lang.String"/>

<form-property name="password" type="java.lang.String"/>

</form-bean>

    RequestProcessor用和ActionForm相同的方式建立、填充并验证了DynaActionForm,例如,请求对象的参数被以<form-bean>元素中特定的动态属性填充到DynaActionForm;其他的参数简单类似。

 

总结

       为一个基于请求/响应的HTTP协议实现MVC语义(semantics)需要付出重大的时间和努力。选择一个合适的架构以解决该问题提供一个领先的项目,允许架构师和开发者关注于事务语义而不是整合语义。Struts也提供充足的模型如Struts Validator以声明表单验证,Tiles以聚集合成视图;这些模型增强了架构而且大大简化了设计和开发一个应用的任务。Struts更多的信息和相关配置及安装的说明可以在http://jakarta.apache.org/struts/userGuide/index.html找到。因为Struts开发是一个正在进行的开发,或许就在你读这篇文章的时候,一些实现也会更改,因此,最好的是用发布于http://jakarta.apache.org/struts版本说明和更新来补足这章的内容。

 

参考

[Core] Core J2EE Patterns by Deepak Alur et. al. (Prentice Hall, 2001)

[Gof] Design Patterns by Erich Gamma et. al. (Addison-Wesley, 1995)

 

完, 头一次翻译,也是为了应付考试呀~

翻得不好,大家见谅~

 

 

冰云翻译,转载请告知。

icecloud@sina.com

【android开发】手写签名系统的设计与实现之实现解析pdf文件(二)

上一篇文章,我们介绍了如何去实现读取手机文件及文件夹,并以列表的形式显示出来,今天我们将说说如何读取pdf文件。先看效果图:               选择pdf文件             ...
  • yangxi_001
  • yangxi_001
  • 2014年01月03日 10:46
  • 1081

JSTL与Struts的结合(五)

用于显示XML内容的标签 标签从标签解析后保存的变量中取得需要的XML文件内容,并显示在页面上。该标签是通过XPath技术(定位XML元素的一种技术)来实现的。要使用标签必须将xalan-j的jar...
  • xuxu198899223
  • xuxu198899223
  • 2013年04月23日 12:59
  • 214

(五)struts之taglib标签

关于taglib的标签使用,我倒是不太喜欢,本人更倾向于使用JSTL的标签,不过struts标签一点好处就是:struts标签 能够和struts-config.xml, ActionForm等特有的...
  • yyw6637
  • yyw6637
  • 2013年04月09日 14:27
  • 948

(五)struts之国际化

这里的国际化其实跟第五篇文章和第一篇文章要实现的效果一样,也是登录验证信息,只不过是国际化处理而已,多了几个国际化的配置文件 这里我要说下,可能第一篇文章和第五篇文章看完后,好多人都还有疑问 关于...
  • yyw6637
  • yyw6637
  • 2013年04月09日 14:28
  • 336

使用struts、hibernate、spring进行框架整合流程详细说明

SSH框架应用非常广泛,是目前较流行的一种Web应用程序开源框架。很多公司很多项目都会用到这3种框架,那么如何正确规范的使用这三种框架开发实际的项目呢?下面介绍struts、hibernate、spr...
  • sinat_24578249
  • sinat_24578249
  • 2016年05月28日 16:06
  • 854

struts2中拦截器的简介与配置使用

拦截器是struts2框架的核心,struts2很多的功能都是构建在拦截器基础之上的,它是动态拦截Action调用的对象,提供了一种机制,使得开发者能够在一个Action前后执行需要的代码,可以在一个...
  • wojiaohuangyu
  • wojiaohuangyu
  • 2016年05月22日 21:36
  • 8038

问题记录:myeclipse配置好struts2后,web项目运行出现404

问题记录:myeclipse配置好struts2后,web项目运行出现404
  • qq_22256565
  • qq_22256565
  • 2017年05月10日 22:38
  • 822

数据结构:五岔路口交通管理红绿灯设计

我们可以知道这是一个“图”的着色问题,首先要考虑,为什么可行路线是13条?当然可以通过穷举得出,如果用公式:则是: 或者 因为一条路线必须包括一出一进两个方向 第一种答案的解法: 一、固定E为入口,则...
  • u013599298
  • u013599298
  • 2017年02月13日 13:51
  • 1154

第十九节 协议栈五向按键

第十九节 协议栈五向按键 和前面几个一样,按键的驱动在协议栈中也已经有了,我们只需要做一些小的修改,使它适应我们的开发板即可。 1.修改工程配置,使能按键功能。 2.在我们的工程中要使用...
  • snyanglq
  • snyanglq
  • 2015年11月28日 09:42
  • 470

马云的五新其实没有哪一个是新的

2016年10月13日阿里巴巴集团董事局主席马云在2016杭州·云栖大会上演讲时提出未来“五大新”,并称“五大新”的发展将深刻影响到中国、影响到世界,影响到未来的所有人。这五个“新”包括新零售、新制造...
  • harrymeng
  • harrymeng
  • 2016年10月14日 08:43
  • 4776
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Struts快速入门(五完)
举报原因:
原因补充:

(最多只允许输入30个字)