ActionForm
ActionForm 表示 HTTP窗体中的数据,可以将其看作是模型和视图的中介,它负责保存视图中的数据供模型或者视图使用。ActionForm还具有的过滤保护的作用,只有通过ActionForm 验证的数据才能够发送到 Action 处理。
ActionForm Bean从应用和配置的角度分为两类:动态ActionForm和静态ActionForm和LazyForm。作用一样,只是实现不一样。
一.静态Form
由程序员手工编写Form
1.ActionForm
提交表单的字段名和form中的属性名一致。
2.ValidatorForm
用于验证框架的Form,在请求参数前,先使用验证框架验证。
在struts-config中对应的action标签的validate值为true。
3.ValidatorActionForm
二.动态ActionForm
通过配置文件完成ActionForm配置
1.DynaActionForm
Java代码
2.DynaValidatorForm
和ValidatorForm一样在使用验证框架时使用。配置和DynaActionForm类似。
type="org.apache.struts.validator.DynaValidatorForm"
3.DynaValidatorActionForm
ValidatorActionForm和DynaValidatorActionForm也都是在使用验证框架时使用,和DynaValidatorForm及ValidatorForm不同的是,在配置validtion.xml中<formname=path> name使用的是action的path属性值。以此来区分不同请求的验证规则。
三.还有一种特殊的Form:LazyValidatorForm。
<form-beanname="loginForm"type="org.apache.struts.validator.LazyValidatorForm"></form-bean>
我们没有配置form的属性。所以在jsp页面中必须使用struts标签。
Jsp代码
这样就可以直接进行验证框架和action中的取值。
Java代码
四、ActionForm赋值原理
我们如果知道了Struts的流程,那么理解起ActionForm的赋值过程来就简单了很多,大家都知道,点击提交后,会先初始化ActionServlet类,当接收到请求时,会调用service对象检查HTTP请求类型,通过doGet()或doPost()方法调用process()方法。在ActionServlet中会调用RequestProcessor的process()方法进行处理,该方法负责创建ActionForm对象,创建成功之后,首先执行ActionForm中的reset()方法进行重置,然后得到表单中所有输入域的name名称,再调用request.getParameterValues(),根据name名称得到相应的值,最后将表单中的数据全部放到map中,map的key为表单输入域的名称,map的value为表单输入域的值,接下来调用一个第三方组件BeanUtils,将Map中的值,根据ActionForm中的类型先转换好,再调用ActionForm中的setter方法设置到ActionForm上。
reset()方法:
赋值流程:
简单顺序:先调用构造方法(判断是否存在)――reset(重置)――setter(设定值)
五、总结
ActionForm是在Struts1中存在的一个常用类,ActionForm帮助我们实现了自动设置数据,使得程序员的使用变得简单,不用关心赋值之类的事情而专注于业务。Struts2出现后,不用人们手动写ActionForm了,但是这种思想我们需要了解。