Struts——ActionForm

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

<form-beanname="dynaForm"type="org.apache.struts.action.DynaActionForm">
   <form-property name="username"type="java.lang.String"/>
   <form-property name="age"type="java.lang.Integer"/>
</form-bean>

Java代码

public ActionForwardexecute(ActionMapping mapping, ActionForm form,
HttpServletRequestrequest, HttpServletResponse response)
throwsException {

DynaActionFormdaf=(DynaActionForm)form;
Stringusername=(String)daf.get("username");
    Integerage=(Integer)daf.get("age");

   System.out.println("UserName="+username);
    System.out.println("Age="+age);
    returnmapping.findForward("success");
}

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代码

<br>基本使用方式<br>Customer Name:<html:text property="username"></html:text>
<br>Customer Code:<html:text property="usercode"></html:text>
<br>
<br>自动封装Map<br>国家:<html:text property="address(nation)"></html:text>
<br>省份:<html:text property="address(state)"></html:text>
<br>城市:<html:text property="address(city)"></html:text>  

这样就可以直接进行验证框架和action中的取值。

Java代码

public ActionForwardexecute(ActionMapping mapping, ActionForm form,
HttpServletRequestrequest, HttpServletResponse response)
throwsException {
LazyValidatorFormlz = (LazyValidatorForm) form;
Stringusername = (String) lz.get("username");
Stringusercode = (String) lz.get("usercode");
System.out.println("name---" + username + "   usercode---" + usercode);
Map m =(Map) lz.get("address");
System.out.println(m.get("nation"));
System.out.println(m.get("state"));
System.out.println(m.get("city"));
returnnull;
}
 

四、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了,但是这种思想我们需要了解。

时间: 2024-10-14 22:14:48

Struts——ActionForm的相关文章

Struts ActionForm简单理解

要想明确struts的控制流程以及它核心API的实现原理(比方 Action/DispatchAction/ActionForm的实现原理),玩转struts1.2的关键就是可以玩转 ActionForm. ActionForm的应用 1.--ActionForm的特性 1.创建一个form类必须继承于四个父类中的一个,比方ActionForm.ValidatorForm. 2.一个form类中的每个属性都将和页面中form表单中的每个表单元素一一相应 Example: 一个表单为: <form

目前见到的最傻瓜全面的STRUTS入门教程^_^

目前见到的最傻瓜全面的STRUTS入门教程^_^ 一  Jakarta Struts学习之新手上路 Web 应用开发早期曾经是那么的“简单”,那个时候还只是纯HTML页面和浏览器特效而已.由于还涉及不到动态数据操作和商业应用,也就省去了很多麻烦.但是这 样的“简单”只是过眼云烟,如今我们不得不为复杂的基于Web的商业应用开发采用诸多技术. 本文将介绍如何利用Struts进行应用开发的前台整合的开发过程.Struts是一个为开发基于模型(Model)-视图(View)-控制器 (Controlle

Java报错原因汇总

1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序 遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片 未经初始化,或者图片创建时的路径错误等等.对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初 始化混淆起来了.数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是

Java异常处理总结Exception\Error

Java异常处理总结Exception\Error 2012-12-28 08:17:17|  分类: JAVA |  标签:java  |举报|字号 订阅 Java异常处理总结 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出现,那么你每个地方都要做相同处理,感觉相当的麻烦! Java语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,

Java 常见异常种类

Java Exception: 1.Error 2.Runtime Exception 运行时异常3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系统的错误,不允许捕获:Exception类代表了标准Java库方法所激发的异常.Exception类还包含运行异常类Runtime_Exception和非运行异常类Non_RuntimeException这两个直接的子类. 运行异常类对应于编译错误,它是指Java程序在运行时产生的由解释器引发的各种异

JAVA开发中遇到的异常总结

最常见的五种异常:必会,面试题: 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException ====================================================

java中的异常和处理

算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberF

java常见异常集锦

1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等.对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了.数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,

java 异常大集合

关键字:Java 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异