正文

form bean2007-03-13 10:03:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hurongliang/23899.html

分享到:

 初级:
ActionForm:
reset()是一种钩子方法,Struts在使用提交的HTML表单填充Form Bean 前会调用该方法。
validate()也是一种钩子方法,Struts在使用提交的HTML表单填充Form Bean 后会调用该方法。
Form Bean 的属性可以是任何对象类型。Struts负责类型转换。最好将Form Bean 字段设置为 String 而不是去他的类型,这是因为所有的HTML表单数据都以字符串的形式输入。如果将数据存储在 Long 中,当Struts试图将字符串值转换成数字时,如果该值为字符将会庖厨NumberFormatException。当表但再次显示时,显示的无效数据为0而不是原来输入的字符串,这是因为字母不能存储在数字类型字段中。
对于每一个客户请求,Struts framework在处理ActionForm的时候,一般需要经历如下几个步骤:
(1)检查Action的映射,确定Action中已经配置了对ActionForm的映射
 (2)根据name属性,查找form bean的配置信息
 (3)检查Action的formbean的使用范围,确定在此范围下,是否已经有此form bean的实例。
 (4)假如当前范围下,已经存在了此form bean的实例,而是对当前请求来说,是同一种类型的话,那么就重用。
 (5)否则,就重新构建一个form bean的实例
 (6)form bean的reset()方法备调用
 (7)调用对应的setter方法,对状态属性赋值
 (8)如果validatede的属性北设置为true,那么就调用form bean的validate()方法。
(9)如果validate()方法没有返回任何错误,控制器将ActionForm作为参数,传给Action实例的execute()方法并执行。否则将生成ActionErrors并将其保存在request scope范围里,request自动跳转到有mapping里的input属性指定的页面。
注意:直接从ActionFrom类继承的reset()和validate()方法,并不能实现什么处理功能,所以有必要自己重新覆盖。
仅当ActionMapping对象中validate属性被设为true时,validate(…)方法被调用;这就是默认的行为。
request.getParameterValues(parameterName)被用于得到一个String[]对象,它用来表
单填充;验证的结果应该是一个ActionErrors对象,用org.apache.struts.taglib.html.ErrorsTag来显示验证错误给用户
在struts1.1中,ActionForm的校验功能,逐渐被剥离出来(当然依然可以使用)。使用了validator framework对整个应用系统的表单数据验证进行统一管理。
 高级:
  有两大类form bean:
 第一类是不需要使用validator验证机制的ActionForm:org.apache.struts.action.ActionForm和org.apache.struts.action.DynaActionForm
1. ActionForm是常规类,form bean必须是AcitonForm的一个子类,在子类中设置相关属性。
2. 若form bean设置为org.apache.struts.action.DynaActionForm则不需要生成具体的form bean且 他的属性可以在struts-config.xml里的form-bean元素里指定。原先form bean里的validation()功能在action里执行。reset()方法不起作用。若需要,则需重新写一个DynaActionForm类的子类并覆盖reset()方法。然后将form –bean元素的type属性设置为该子类。
 第二类是使用validator验证框架的formbean:
org.apache.struts.validator.ValidatorForm
org.apache.struts.validator.ValidatorActionForm
org.apache.struts.validator.DynaValidatorForm
org.apache.struts.validator.DynaValidatorActionForm
1. 第一种validatorForm:
他与没有使用Validator的ActionForm很相似,不同的是form bean是有ValidatorForm 派生来的而不是ActionForm.该类没有实现reset()和validation()方法。因为ValidatorForm实现这些方法。
2. 第二种ValidatorActionForm:
第一种中,validator.xml文件中的验证定义与form bean关联起来,对于多个操作共享form bean时是理想的。但有时不同的操作需要不同的验证方法,因此可以将validator.xml文件中的验证定义不与form bean 关联而与操作路径关联,这就用到ValidatorActionForm。
eg:
两种操作创建地址和编辑地址路径/createAddress和/editAddress。
struts-config.xml:
<action-mappings>
  <action  path=”/createAddress”
type=”sample.CreateAddressAction”
name=”addressForm”/>
<action-mappings>
  <action  path=”/editAddress”
type=”sample.EditAddressAction”
name=”addressForm”/>
虽然他们对应相同的addressForm,但可以通过不同的路径来区分。
validation.xml:
<formset>
  <form name=”/createAddress”>
<field property=”city” depends=”required”>
  <arg0 key=”prompt.city”/>
</field>
</form>
<form name=”/editAddress”>
<field property=”state” depends=”required”>
  <arg0 key=”prompt.state”/>
</field>
</form>
由于你的form bean是ValidatorActionForm,Validator知道使用操作路径而不是form bean逻辑名称来进行验证。
3. 第三四种:DynaValidatorForm、DynaValidatorActionForm:
分别与第一二种对应。不同的是不创建定义form bean的类文件。只需在<form-bean>里定义一个form bean 和他的属性即可。

 

阅读(5953) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册