在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属性从资源文件中取出相应的验证错误,并输入页面中指定的位置显示验证错误。

ActionForm类及表单数据验证相关推荐

  1. PHP 代码实现表单数据验证类 整理的各种情况

    这篇文章主要介绍了PHP代码实现表单数据验证类,需要的朋友可以参考下 下面通过一段PHP代码实现表单数据验证类,具体介绍如下: 非常好用方便的表单数据验证类 --------------------- ...

  2. PHP代码实现表单数据验证类

    下面通过一段PHP代码实现表单数据验证类,具体介绍如下: 非常好用方便的表单数据验证类 <?php //验证类 class Fun{ function isEmpty($val) { if (! ...

  3. php表单数据验证类

    非常好用方便的表单数据验证类 <?php //验证类 class Fun{ function isEmpty($val) { if (!is_string($val)) return false ...

  4. 前端/后端 - 表单数据验证 - 个人实践

    1.应用场景 主要用于前端/后端的表单数据验证. 由于在之前的老项目中开发使用, 便使用了这种方式, 但是最终没有被采用.  具体的细节已经有些遗忘了, 但是依然可以作为参考. 2.学习/操作 语言: ...

  5. 数据验证html,JavaScript 表单数据验证

    JavaScript 表单 HTML 表单验证可以通过 JavaScript 来完成. HTML 表单验证也可以通过浏览器来自动完成. 如果表单字段 (fname) 的值为空, required 属性 ...

  6. php 自动验证表单类,thinkPHP 表单自动验证功能

    昨天晚上我们老大叫我弄表单自动验证功能,愁了半天借鉴了好多官网的知识,才出来,诶,总之分享一下我自己的成果吧! thinkphp 在Model基类为我们定义了自动验证的函数和正则表达式,我们只需要在对 ...

  7. 使用validate.js实现表单数据验证

    ASP.NET关于表单验证,目前知道的,除了以前那种傻瓜式的每个表单选项都用一个函数去验证之外,有两种方法是比较方便的,今天先介绍一下第一种,在前端实现表单验证的方法--基于validate.js的表 ...

  8. ThinkPHP5表单令牌+表单数据验证验证规则

    转:http://blog.163.com/zhuxun_why/blog/static/26813905020171861417642/ 表单验证真的很简单 相比较yii的表单验证tp做的很人性 也 ...

  9. AngularJS 表单数据验证及错误信息提示

    一.表单验证基本原理 表单验证包括两个主题: 定义验证规则,验证数据有效性. 显示验证结果,把验证结果以友好的方式显示给用户. H5内置一些验证功能,并会显示内置的错误提示信息,先要禁用它,在< ...

最新文章

  1. Ubuntu 16.04安装QQ(不一定成功)
  2. npm should be run outside of the Node.js REPL, in your normal shell
  3. 常用浏览器内核驱动下载地址
  4. 活动报名 | 新国立尤洋:FastFold——将AlphaFold训练时间从11天减少到67小时
  5. mysql 删除原理_MySQL权限原理及删除MySQL的匿名账户
  6. python函数的返回值是返回引用吗_python-函数(上):函数返回值、函数调用、前向引用...
  7. JavaScript每日学习日记(0)
  8. windows server 2008R2 部署WSUS 服务
  9. 北京活动预告丨来ACOUG 年会过个温暖的冬天吧!
  10. evt参数是干啥用的_塑料凳子上的洞,是干啥用的?
  11. HTML的不同版本区别,HTML4.0、XHTML、HTML5每个版本之间有什么区别
  12. LeetCode(868)——二进制间距(JavaScript)
  13. Kubernetes RBAC 详解
  14. Algorithm Analysis: common functions, asymptotic notation
  15. SpringBoot服务端集成腾讯云短信服务
  16. 开源开放 | OpenKG 更新发布新冠概念、防控和流行病等多个知识图谱
  17. 解决eclipse 错误: 找不到或无法加载主类
  18. 企业网站建设前如何进行网站策划
  19. “四舍六入五成双规则” 与 C语言如何实现“四舍五入”
  20. 使用CSS展现出各行星轨道

热门文章

  1. OpenCASCADE绘制测试线束:数据交换命令之XDE 颜色命令
  2. OpenCASCADE:Modeling Data之3D几何
  3. wxWidgets:wxScopedPtr类用法
  4. wxWidgets:支持插件的程序
  5. boost::search相关的测试程序
  6. 用作键提取器的函数的 Boost.MultiIndex 示例
  7. boost::math::tools::sum_series用法的测试程序
  8. boost::intrusive::member_value_traits用法的测试程序
  9. boost::histogram::detail::accumulator_traits用法的测试程序
  10. boost::detail模块实现utf8编码的测试程序的测试程序