程序员人生 网站导航

Struts――ActionForm

栏目:互联网时间:2014-10-29 08:00:01

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属性值。以此来区分不同请求的验证规则。

 

 

 

.还有一种特殊的FormLazyValidatorForm

<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中会调用RequestProcessorprocess()方法进行处理,该方法负责创建ActionForm对象,创建成功之后,首先执行ActionForm中的reset()方法进行重置,然后得到表单中所有输入域的name名称,再调用request.getParameterValues(),根据name名称得到相应的值,最后将表单中的数据全部放到map中,mapkey为表单输入域的名称,mapvalue为表单输入域的值,接下来调用一个第三方组件BeanUtils,将Map中的值,根据ActionForm中的类型先转换好,再调用ActionForm中的setter方法设置到ActionForm上。

 

reset()方法:


赋值流程:

 


 

简单顺序:先调用构造方法(判断是否存在)――reset(重置)――setter(设定值)

 

五、总结

        ActionForm是在Struts1中存在的一个常用类,ActionForm帮助我们实现了自动设置数据,使得程序员的使用变得简单,不用关心赋值之类的事情而专注于业务。Struts2出现后,不用人们手动写ActionForm了,但是这种思想我们需要了解。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐