分享
 
 
 

Struts快速入门(五完)

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

用FormTag初始化ActionForm对象

本节早前提到,HTML表单中动作URL被映射到一个<action>配置,并轮流被映射到一个<form-bean>配置。FormTag中由action属性制定的URL被FormTag转换为一个在部署描述符中<url-pattern>确定的路径结构URL。对于扩充的映射,这意味着资源扩展和<url-pattern>指定的一样。因此,一个表单URL中 editCustomerProfile?customerType=preferred被转换为/editCustomerProfile.do?customerType=preferred。FormTag调用RequestUtils.createActionForm(…)方法,查找一个ActionFormBean配置对象(ActionFormBean 是<formbean>元素的运行时表现),其名称匹配指定的相应<action>的名称。一个新的ActionForm实例使用<form-bean>元素type属性被建立;当ActionForm实例在指定的活动范围内未找到时,一个新的实例被建立,否则FormTag调用已存在的表单bean的ActionForm.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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有