zoukankan      html  css  js  c++  java
  • 【转载】StrutsActionForm详解

    转自:http://zhaohe162.blog.163.com/blog/static/382167972010412105024604/

    truts框架中的视图组件主要包括:
    ·JSP页面
    ·ActionForm类
    ·Struts自定义标记
    ·消息资源
    其中,ActionForm类是Struts框架的核心组件之一,是Struts的关键视图组件。

    1.ActionForm的作用机理
    ActionForm本质上是一种JavaBean,是专门用来传递数据的DTO(Data Transfer Object,数据传递对象)。它包括用于表单数据验证的validate()方法和用于数据复位的reset()方法。
    Struts框架利用ActionForm对象来临时存放视图页面中的表单数据。例如一个登录页面会有一个用户输入框和一个密码输入框,以及用来提交登录请求的按钮。当用户提交登录请求后,Struts将用户名和密码两个输入域的数据自动填充到相应的ActionForm对象中,然后控制层可以从该ActionForm对象中读取用户输入的表单数据,也可以把来自模型层的数据存放到ActionForm中,然后返回给视图显示。

    ActionForm有请求(request)和会话(session)两种作用域(scope)。如果ActionForm的作用域设定为request,ActionForm实例将保存在request对象中,像其他保存在request对象中的属性一样,仅在当前的请求/响应范围内有效。如果ActionForm的作用域设定为session,那么ActionForm实例将被保存在session对象中,同一个ActionForm实例在整个HTTP会话中有效。

    Struts-ActionForm详解 - 断尘伤痕 - 断尘居

    当验证ActionForm时,如果检测到一个或多个验证错误,Struts框架会把错误转发回配置文件struts-config.xml中<action>元素的input属性所指定的输入页面。

    2.ActionForm的使用方法

    (1)创建ActionForm
    可以通过扩展Struts软件包的ActionForm类,来创建具体的ActionForm。Struts软件包中的ActionForm类本身是一个抽象类,在扩展该类时,为每一个要从HTML表单中捕获的输入域定义一个属性,使表单输入域与ActionForm的属性一一对应,以使ActionForm能够捕获需要的表单输入。定义了具体的属性,就可以覆写validate()和reset()方法,来实现具体的ActionForm验证规则和初始化方法。

    (2)配置ActionForm
    每创建一个ActionForm类,就需要在Struts的配置文件struts-config.xml中配置这个类,例如:
    <form-beans>
    <form-bean name="loginActionForm" type="login.loginActionForm" />
    </form-beans>
    <form-beans>元素用来指定全体ActionForm的配置,一个Struts应用所有的ActionForm的配置都要位于该元素标记内。<form-beans>元素的子元素<form-bean>用来配置一个具体的ActionForm类,每个<form-bean>元素对应的内容为一个form bean实例。一旦定义了<form-beans>元素,就可以在Action中使用它。

    (3)访问ActionForm
    ActionForm可以被JSP,Struts自定义标记,Action或其他Web组件访问。访问ActionForm的一般方法如下:
    ·使用Struts HTML标记库
    Struts HTML标记库提供了一组和ActionForm密切关联的标记,这些标记对应到HTML表单域。如<html:form>标记对应HTML的<form>标记,<html:text>标记对应HTML表单的text类型<input>输入域。这些标记和ActionForm交互,以把ActionForm中的属性值显示出来。

    ·从request或session对象中取出ActionForm对象
    根据作用域的不同,Struts框架把ActionForm实例保存在request或session对象中,保存时采用的key值为<form-bean>元素的名字,即name属性的值。因此,可以像取出任何存放在request或session对象中的属性一样取出ActionForm实例。例如:
    loginActionForm form=(loginActionForm)request.getAttribute("loginActionForm");

    ·在Action类的execute()方法中直接访问ActionForm
    如果配置了ActionForm和Action映射,Struts框架就会把ActionForm作为参数传递给Action类的execute()方法,在execute()方法中,可以直接读取或设置ActionForm属性。

    3.表单数据验证
    表单验证是ActionForm的主要功能之一,要实现这个功能,我们需要采取4个步骤:
    ·重写validate()方法。
    ·在资源文件ApplicationResources.properties中设置可能的验证错误的标识。
    ·要在配置文件struts-config.xml中,把<action>元素的validate属性设置为true,并添加<message-resources>元素以指明资源文件的存放路径。
    ·在相应输入页面的相应位置加如错误标记<html:errors>,以输出可能的验证错误。
    (1)重写validate()方法
    对该form bean的validatet()方法进行重写。ActionErrors类封装了一组验证错误,它的用法类似Map类。而ActionMessage类封装了单个验证错误,它的构造函数内的参数就指向资源文件内的一个错误文本。例如语句“ActionMessage("login.password.error");”中的参数"login.password.error"其实就是资源文件ApplicationResources.properties中的一条错误文本的键(key)。通过ActionErrors对象的add()方法,可以把ActionMessage对象加入到ActionErrors对象中。
    (2)设置资源文件
    在Struts的资源文件ApplicationResources.properties中设置可能的验证错误的标识:
    #用户名错误
    error.username.required=<li>Please input your username again!</li>
    #密码错误
    error.password.required=<li>Please input your password again!</li>
    (3)修改配置文件struts-config.xml
    将配置文件struts-config.xml中<action>元素的validate属性设定为true。此外,还需要增加<message-resource>元素,以指明资源文件的路径。
    (4)在输入页面中加入错误标记
    表单数据验证的目的是,一旦用户在输入页面表单中输入的数据不符合要求或出现错误,Struts验证机制将把验证错误在该输入页面相应的位置显示出来。
    <html:errors>是Struts的一个自定义标记。它能根据它的property属性从资源文件ApplicationResources.properties中取出相应的验证错误,并在输入页面中指定的位置显示验证错误。

  • 相关阅读:
    算法图解之散列表
    算法图解之快速排序
    算法图解之分而治之
    __setitem__,__getitem,__delitem__的作用
    算法图解之递归
    Python开发不可不知的虚拟环境
    静态属性property的本质和应用
    SQLmap详解
    windows提权备忘录
    linux提权备忘录
  • 原文地址:https://www.cnblogs.com/bukudekong/p/2086574.html
Copyright © 2011-2022 走看看