Struts(四)ActionForm

本文详细介绍了Struts框架中ActionForm组件的作用、执行时间、自定义方式、验证过程及其生命周期,包括如何定义自己的ActionForm、验证机制、不同生命周期设置以及配置方法。

在Struts中ActionForm也是一个很重要的组件。他的主要作用就是收集数据。

 

1、ActionForm的作用

       ActionForm 用来收集表单中的数据,可以将其看作是模型和视图的中介,它负责保存视图中的数据供模型或者视图使用。同时ActionForm 具有的过滤保护的作用,可以在将ActionForm数据发送到 Action 处理之前进行验证。

2、ActionForm的执行时间

        ActionForm 是与一个或多个 ActionConfig 关联的JavaBean,在相应的 action 的 execute 方法被调用之前,ActionForm 会自动利用请求参数来填充自己(初始化属性)。

3、定义自己的ActionForm

        ActionForm 是一个抽象类,必须通过继承来实现自己的类。在ActionForm中需要定义要收集的属性名,即表单中的信息,并为每个属性设置getter和setter方法,举个例子:

Jsp文件:

<body>

<form action="login.do" method="post">

        用户名:<input type="text" name="username"><br/>

        密 码:<input type="password" name="password"><br/>

     <input type="submit" name="login">

</form>

</body>


 

则对应的自己的ActionForm为:

package wh;

 

import org.apache.struts.action.ActionForm;

 

publicclass LoginActionForm extends ActionForm {

 

   

   

   private String username;

   private String password;

//注意get和set后的内容与表单中的name相同

   public String getUsername() {   

      returnusername;

   }

   publicvoid setUsername(String username) {

      this.username = username;

   }

   public String getPassword() {

      returnpassword;

   }

   publicvoid setPassword(String password) {

      this.password = password;

   }

}


 

         需要注意的是,因为ActionForm利用属性的 getter 和 setter 方法来实现初始化,所以getUsername中的Username(首字母可大写)应该与表单中name="username"相同。

 

4、ActionForm的验证

        初始化完毕后,在ActionServlet调用Action类前,ActionForm 的 validate() 方法被调用,我们可以在其中来检查请求参数的正确性和有效性:

        Public ActionErrors validate(ActionMapping mapping,   ServletRequest request)   

        Public ActionErrors validate(ActionMapping mapping,   HttpServletRequest request)   

 

        我们需要在自己的ActionForm bean里覆盖validate()方法,并在配置文件里设置<action>元素的validate为true。调用validate()后,如果返回的ActionErrors不是null,则ActinForm会根据错误关键字将ActionErrors存储在请求属性列表中。   

        如果返回的不是null,而且长度大于0,则根据错误关键字将实例存储在请求的属性列表中,然后ActionServlet将响应转发到配置文件<action>;元素的input属性所指向的目标。   

        如果需要执行特定的数据有效性检查,最好在Action类中进行这个操作,而不是在ActionForm类中进行。

验证返回null之后ActionForm 将被作为参数传给 action 的 execute 方法以供使用。

 

5、ActionForm的生命周期

          ActionForm bean 的生命周期可以设置为 session(缺省)和 request,当设置为 session 时,注意在 reset() 方法中将所有的属性重新设置为初始值。

         public void reset(ActionMapping mapping,HttpServletRequest request)   

         public void reset(ActionMapping mapping,ServletRequest request)   

 

6、ActionForm的配置:

         Struts框架假设用户在应用程序中为每个表单都创建了一个ActionForm bean,对于每个在struts-config.xml文件中定义的bean,框架在调用Action类的perform()方法之前会在相关联的关键字下,检查用于适当类的bean实例,没有可用的bean,它就会自动创建一个新的bean,对于请求中每个与bean属性名称对应的参数,Action调用相应的set方法设置。当Action perform()被调用时,最新的ActionForm bean传送给它,参数值就可以立即使用了。

        上面例子的Form bean的配置举例:

<?xml version="1.0" encoding="ISO-8859-1" ?>

 

<!DOCTYPE struts-config PUBLIC

          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"

          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

 

<struts-config>

       <form-beans>

            <form-bean name="loginForm" type="wh.LoginActionForm"></form-bean>

       </form-beans>

       

       <action-mappings>

       <action path="/login"

                 type="wh.LoginAction"

                 name="loginForm"

                 scope="request"

                 validate="true"

                input="/error.jsp"

                 >

                 <forward name="success" path="/success.jsp"></forward>

                 <forward name="error" path="/error.jsp"></forward>

       </action>

      </action-mappings>

</struts-config>

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值