`
gongmingwind
  • 浏览: 588457 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

(转)(Struts)ActionForm类及表单数据验证

阅读更多
在Struts的中央控制器中写了Struts的控制器角色,在这篇介绍下Struts的视图!
Struts的视图组件:
Struts框架中的视图组件主要包括:
JSP页面。
ActionForm类。
Struts自定义标记。
消息资源。
其中,ActionForm类是Struts框架的核心组件之一,是Struts的关键视图组件。在这篇文章中,将讨论ActionForm类及其作用。
ActionForm的作用机理:
ActionForm本质上是一种JavaBean,是专门用来传递表单数据的DTD(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属性所指定的输入页面。

ActionForm的使用方法:
下面通过在(Struts重构)构建一个简单的基于MVC模式的JavaWeb的例子,来介绍一下ActionForm的正确使用,包括如何创建,配置和访问。
1.创建ActionForm
可以扩展Struts软件包的ActionForm类来创建具体的ActionForm。Struts软件包中的ActionForm类本身 是一个抽象类,在扩展的时候,为每一个要从HTML表单中捕获的输入域定义一个属性,使表单输入域与ActionForm属性一一对应,以使 ActionForm能够捕获需要的表单输入。定义了具体的属性,就可以覆盖父类 的validate()和reset()方法,来实现具体的ActionForm验证规则和初始化方法。
下面是我在(Struts重构)构建一个简单的基于MVC模式的JavaWeb里面的例子
/**//*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package struts.form;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

/** *//** 
 * Struts框架的ActionForm对象,它可用来在用户和业务层之间舆用户的输入数据。
 * ActionForm也叫FormBean.Struts框架会自动从请求中惧输入数据,再将 这些
 * 数据交给一个使用FormBean的Action对象,接着FormBean可以再交给业务层
 */
public class LoginHandlerForm extends ActionForm {
    /**//*
     * Generated fields
     */

    /** *//** userName property */
    private String userName;

    /** *//** userPwd property */
    private String userPwd;

    //验证方法,主要用于验证视图上的数据,例如非空之类,
    //如果要进行业务验证,则应该在Action中进行!
    public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) {
        
        return null;
    }
    //初始化首先调用的方法
    public void reset(ActionMapping mapping, HttpServletRequest request) {
        // TODO Auto-generated method stub
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    
    public String getUserPwd() {
        return userPwd;
    }

    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }
}


在以上的loginActionForm中,validate()方法和reset()方法是ActionForm中两种可以覆盖的方法。validate()方法中定义具体的ActionForm验证规则。

2.配置ActionForm
每创建一个ActionForm类,就需要在Struts的配置文件中配置这个类。如上的类配置如下:
<form-beans >
    <form-bean name="loginHandlerForm" type="struts.form.LoginHandlerForm" />
 
  </form-beans>

<form-beans>

元素用来指定全体ActionForm的配置,一个Struts应用所有的ActionForm的配置都要位于该元素标记内。<form-beans>元素的子元素<form-bean>用来配置一个具体的ActionForm类,每个<form-bean>元素对应的内容为一个form bean实例。一旦定义了<form-bean>元素,就可以在Action中使用它了。

3.访问ActionForm
ActionForm可以被JSP,Struts自定义标记,Action或其他Web组件访问。访问ActionForm的一般方法如下:
a) 使用Struts HTML标记库
Struts HTML标记库提供了一组和ActionForm密码关联的标记,这些标记对应到HTML表单域。如<html:form>标记对应HTML 的<form>标记,<html:text>对应HTML表单的text类型的<input>输入域。这些标记和 ActionForm交互,以把ActionForm中的属性值显示出来。
b)  从request或session对象中取出ActionForm对象
根据作用域的不同,Struts框架把ActionForm实例保存在request或session对象中,保存时采用的key值为<form- bean>元素的名字,即name属性的值。因此,可以像取出任何存放在request或session对象中的属性一样取出ActionForm 实例。如:
LoginHandlerForm loginHandlerForm = (LoginHandlerForm)request.getAttribute("loginHandlerForm");  
     
       

c)在Action类的execute()方法中直接访问ActionForm
如果配置了ActionForm和Action映射,Struts框架就会把ActionForm作为参数传给Action类的execute()方法,在execute()方法中,可以直接读取或设置 ActionForm属性。在Action中使用ActionForm的示例如下:
   
public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
    LoginHandlerForm loginHandlerForm = (LoginHandlerForm) form;        
        //从Form中取得表单数据
        String userName = loginHandlerForm.getUserName();
        String userPwd = loginHandlerForm.getUserPwd();
        //(略)
        return mapping.findForward(forward);
        
    }



表单的数据验证
在上面的LoginHandlerForm代码中我们看到validate()方法体几乎是空的,也就是说 LoginHandlerForm没有启动对表单数据进行验证的功能。我们也看到validate()方法返回的是一个ActionErrors对象。该对象封装了验证过程中所发现的错误。
表单验证是ActionForm的一个主要的功能之一。要实现这个功能,我们需要采取4个步骤:
a)重写validate()方法。
b)在资源文件ApplicationResources.properties中设置可能的验证错误的标识。
c)要在配置文件struts-config.xml中,把<action>元素的validate属性设置为true(默认已经是true),并添加<message-resources>元素以指明资源文件的存放路径。
d)在相应输入页面的相应位置加入错误标记<html:errors>,以输出可能的验证错误。
如上代码,如果我们要在LoginHandlerForm中实现输入数据验证功能,则相应采取上术四步。
1.重写validate()方法,如下:
//验证方法,主要用于验证视图上的数据,例如非空之类,
    //如果要进行业务验证,则应该在Action中进行!
  
 public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) {
        
        ActionErrors errors = new ActionErrors();
        if(userName == null || userName.length()<3)
                    //此处userName为错误key,在前面页面中要使用该名字以显示
            errors.add("userName",new ActionMessage("error.login.userName",userName));
        if(userPwd == null || userPwd.length()<3)
            errors.add("userPwd",new ActionMessage("error.login.userPwd",userPwd));
        return errors;
    }

在以上代码中我们使用 了ActionErrors类和ActionMessage类。ActionErrors类封装了一组验证错误,它的用法类似 Map类。而ActionMessage类封装了单个验证错误,它的构造函数内的参数就指向资源文件内的一个错误文本。例如语句"ActionMessage("error.login.userName")"中的参数"error.login.userName" 其实就是资源文件ApplicationResources.properties中的一条错误文本的键(key)。通过ActionErrors对象的 add()方法,可以把ActionMessage对象加入到ActionErrors对象中。
2.设置资源文件
在struts的资源文件ApplicationResources.properties中设置可能的验证错误的标识:
# Resources for parameter 'struts.ApplicationResources'
# Project MVCStruts
error.login.userName=用户名必须填写且长度不小于3
error.login.userName=密码必须填写且长度不小于3
在资源文件中我们不能直接写中文,否则会出现乱码,至于我这里中文一是方便看,二是我按照了插件,可以自动过滤!插件可参考解决Struts中ApplicationResources.properties文件不支持中文问题
3.修改配置文件struts-config.xml
将配置文件struts-config.xml中<action>元素的validate属性设置为true,此处,还需要<message-resources>元素,以指明资源文件的路径。如下:
<action
      attribute="loginHandlerForm"
      input="/login.jsp"
      name="loginHandlerForm"
      path="/loginHandler"
      scope="request"
      validate="true"
      type="struts.action.LoginHandlerAction" >
    <!-- action与视图组件的联系在配置文件中写,这样就大大降低了Action和VIEW的耦合性  -->
          <forward name="success" path="/main.jsp" />
          <forward name="fail" path="/register.jsp" />
     </action>
<!-- 资源文件 -->
  <message-resources parameter="struts.ApplicationResources" />



资源文件书写类似JAVA文件,有包之分,注意是点号,不要写成反斜杠/
4.在页面 中加入错误标记:
<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> 
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> 
<html> 
    <head>
        <title>JSP for LoginHandlerForm form</title>
    </head>
    <body>
        <html:form action="/loginHandler">
            userName : <html:text property="userName"/><html:errors property="userName"/><br/>
            userPwd : <html:text property="userPwd"/><html:errors property="userPwd"/><br/>
            <html:submit/><html:cancel/>
        </html:form>
    </body>
</html>



<html:errors>是struts的一个自定义标记。它能根据它的property属性从资源文件中取出相应的验证错误,并输入页面中指定的位置显示验证错误。


转自:http://www.cnblogs.com/eflylab/archive/2007/01/08/614465.html
  • 大小: 58.2 KB
分享到:
评论

相关推荐

    struts1使用actionform实现表单验证

    使用Struts1的ActionForm进行表单验证是一种常见的做法,它允许我们在服务器端对用户输入进行严格检查,确保数据的完整性和安全性。同时,通过追加错误信息,可以友好地提示用户,提高用户体验。 以上就是关于...

    struts中ActionForm的validate方法使用小得

    在Struts中,ActionForm类是处理用户输入数据的核心组件,它封装了请求参数并负责业务逻辑验证。本文将详细讨论如何在Struts中使用ActionForm的`validate`方法进行数据验证。 `validate`方法是在ActionForm中定义的...

    关于struts表单验证

    总的来说,Struts的表单验证机制是通过ActionForm Bean、`validate()`和`reset()`方法实现的,提供了强大的数据校验功能,保证了用户输入数据的合法性。同时,结合资源文件,可以轻松实现多语言支持,提供友好的用户...

    struts ActionForm

    Struts ActionForm是Java Web开发中Struts框架的一个核心组件,主要用于处理用户在表单中的输入数据。在早期的Struts 1版本中,ActionForm是MVC设计模式中的Model部分,它作为控制器(Controller)与视图(View)...

    Struts动态表单验证

    通过阅读源代码和运行示例,你可以看到如何在实际环境中实现动态表单验证,包括配置文件、Action类、ActionForm以及相关的JSP页面。 8. **最佳实践** - 将验证逻辑从ActionForm中分离出来,使代码更清晰。 - 使用...

    Struts2框架ActionForm自动填充表单

    在实际开发中,你可能还会结合其他Struts2的特性,比如`Validation`(验证)和`Result`(结果类型),来实现更复杂的功能,如表单验证、错误处理和页面跳转。例如,你可以定义一个Validator规则文件来指定表单字段的...

    提交多行数据到Struts的ActionForm的List属性中

    首先,ActionForm是Struts框架中用于接收和验证用户输入的数据的类。它继承自org.apache.struts.action.ActionForm接口,并包含多个字段来存储表单中的数据。当用户提交表单时,Struts框架会自动将表单数据填充到...

    Struts_学习笔记之ActionForm

    DynaActionForm继承自ActionForm,提供了动态Bean的功能,而ValidatorForm继承自ActionForm,提供了表单验证功能。 2. ActionForm的方法 ActionForm提供了两个重要的方法:reset()和validate()。reset()方法用于...

    struts 视频 struts视频 actionform

    在Struts框架中,ActionForm类负责收集、验证和封装来自用户界面的数据。当用户通过HTML表单提交请求时,这些数据会被发送到服务器,并由Struts框架自动绑定到ActionForm实例的属性上。ActionForm的每个属性对应表单...

    struts表单验证讲解视频教程

    在Struts框架中,表单验证是一个关键环节,它确保了从用户端提交的数据质量和安全性。本视频教程将深入讲解Struts框架下的表单验证机制。 一、Struts表单验证概述 在Struts中,表单验证通常是通过ActionForm对象来...

    Struts简单的Validator 表单验证类

    总的来说,Struts的Validator框架提供了强大的表单验证功能,可以帮助开发者有效地管理和控制用户输入,确保数据的准确性和一致性。通过理解和运用这个框架,可以提升Web应用的质量和用户体验,同时减少服务器端的...

    struts1.2 from表单提交包含list的对象

    总结来说,Struts1.2处理包含列表对象的表单提交涉及到表单设计、ActionForm的创建、Action类的编写以及Struts框架的内部机制。通过理解这些知识点,开发者能够有效地管理用户输入的复杂数据结构,并在后端进行处理...

    struts 1.2 ActionFrom表单验证

    总的来说,深入理解Struts 1.2的ActionForm表单验证机制,以及它与Spring框架的集成,将有助于提升你在Java Web开发领域的专业技能。这包括熟悉MVC模式、客户端与服务器端验证策略、Struts配置文件、Spring的依赖...

    Struts1.2动态表单验证

    在Web开发中,表单验证是一个关键环节,它确保用户输入的数据符合预设的规则,从而保护系统免受恶意攻击并提高数据质量。Struts1.2提供了动态表单验证功能,使得开发者能够更灵活、高效地处理用户输入验证。 动态...

    Struts1.2动态表单注册 验证实例(1)

    ActionForm对象用于收集用户在页面上填写的数据,Action类处理这些数据并决定后续的流程,而struts-config.xml文件则负责配置各个组件之间的关系和动作映射。 在实现动态表单注册时,我们通常会创建一个ActionForm...

    Struts1.2动态表单注册 验证实例(2)

    然后,将ActionForm指向我们的UserBean,这样当用户提交表单时,Struts会自动调用Validator进行验证。 在JSP页面中,我们可以使用Struts标签库来展示错误消息,例如`&lt;html:errors&gt;`标签,它会显示所有验证失败的...

    关于struts框架的一个很好的表单验证

    在Struts框架中,表单验证是确保用户输入数据正确性和安全性的核心环节。本篇文章将深入探讨Struts框架中的表单验证机制,以及如何有效地利用JavaScript进行前端验证。 首先,表单验证分为前端验证和后端验证两部分...

    Struts动态表单验证Demo视频

    在Struts框架中,动态表单验证是一个关键特性,用于确保用户输入的数据符合业务规则,从而提高应用的安全性和用户体验。 动态表单验证指的是在运行时根据业务需求动态地生成验证规则,而不是静态地硬编码在程序中。...

    Struts高级开发_动态ActionForm.avi

    1. **ActionForm接口**:首先,你需要了解ActionForm的基本概念,它是Struts框架中一个实现了Servlet API的ActionForm接口的类,负责收集和验证来自HTML表单的数据。 2. **动态生成ActionForm**:在动态ActionForm...

    myeclipse 6.5 + struts2 +ajax 实现表单注册验证源码

    Struts2框架提供了ActionForm和Validator插件等手段来实现表单验证。 5. **JavaScript与JSON**:在Ajax中,JavaScript通常用于处理客户端的逻辑,包括发送Ajax请求、处理服务器返回的数据。JSON(JavaScript Object...

Global site tag (gtag.js) - Google Analytics