使用Validator校验数据

2024-04-25 02:18
文章标签 数据 使用 校验 validator

本文主要是介绍使用Validator校验数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



 17.3  使用Validator校验数据

跟Struts 1.x一样,Struts 2也提供数据校验。这种数据校验是配置式的,既可以用XML配置,也可以用Java注解(@Annotation)配置。Struts 2提供了许多默认的校验器,例如数字校验器、电子邮件校验器等,配置一下即可使用。

17.3.1  使用XML配置数据校验Validator

使用XML配置时,需要在Action类所在的package内添加一个XML文件,文件名格式为Action类名-validation.xml或者Action类名-Action别名 -validation.xml。如果Action中有多个方法,一般使用后者。例如BookAction-addBook- validation.xml、BookAction-initAdd Book-validation.xml等。支持校验的Action必须实现Validateable接口,一般继承ActionSupport就可以了。

下面对addBook.action进行校验,首先将BookAction继承ActionSupport以支持校验。校验配置XML文件名应为BookAction-addBook- validation.xml,位置与BookAction.class位于同一个包下。添加书籍时,书籍名称与作者必须填写,如果填写了日期,日期格式必须正确,并位于指定的格式内。校验配置代码如下:

代码17.10  BookAction-addBook-validation.xml

<!DOCTYPE validators PUBLIC

"-//OpenSymphony Group//XWork Validator 1.0//EN"

"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>   

    <field name="book.name">                            <!-- 检查书名-->

        <field-validator type="requiredstring">     <!-- 必需的 -->

            <param name="trim">true</param> <!-- 检查时去掉前后空格 -->

            <message>请输入书籍名称</message>     <!-- 提示信息 -->

        </field-validator>

    </field>

    <field name="book.author">                  <!-- 检查作者,必须非空 -->

        <field-validator type="requiredstring"> <!-- 必需的 -->

            <message>请输入书籍作者</message>         <!-- 提示信息 -->

        </field-validator>

    </field>

    <field name="book.publishedDate">               <!-- 检查出版日期。 -->

        <field-validator type="date">               <!-- 检查日期 -->

            <param name="min">1900-01-01</param>    <!-- 最小值 -->

            <param name="max">2200-01-01</param>    <!-- 最大值 -->

            <message><![CDATA[ 日期格式必须位于 1900-01-01 与 2200-01-01 之         间 ]]></message>

        </field-validator>

    </field>

</validators>

配置完毕后,不需要更改任何的JSP代码。Struts 2的表单标签支持校验错误信息显示(而不用像Struts 1.x那样需要用<html:error />显式地调用)。如果数据校验失败,会转到input页面显示错误信息,因此action配置中要配置名为input的JSP页面。运行效果如图17.2所示。

图17.2  xml配置式校验

17.3.2  配置客户端Validator

以上校验是在服务器端完成的。Struts 2也支持客户端JavaScript校验。方法很简单,再将JSP的<struts:form>标签添加validate="true"属性即可。Struts 2的客户端校验与Struts 1不同,Struts 1使用了提示框显示错误信息,Struts 2抛弃了烦人的提示框,显示错误方式与服务器端校验完全一样。效果同图17.2。

%提示:客户端校验是通过JavaScript实现的,因此Struts 2会自动加载相应的JavaScript类库。

17.3.3  常用的Validator

本次校验只使用了requiredstring与date校验器。Struts 2自带许多的校验器,包括字符串校验器、数字校验器、字符长度校验器、日期校验器、URL校验器、电子邮件校验器等。如果都不能满足,还可以使用正则表达式校验,正则表达式校验基本上可以满足所有的情况。

常用的Struts 2内置的校验器见表17.1。

表17.1  Struts 2常用的校验器

校  验  器

作    用

required

检查被校验域是否为null

requiredstring

检查被校验String是否为null或空,可选参数trim,在验证前对字符串执行trim操作

stringlength

检查被校验String的长度范围,可选参数trim、minLength、maxLength

int/double

检查输入是否为int/double,并且可判断数值范围,可选参数为min、max;minInclusive、maxInclusive、minExclusive、maxExclusive

date

检查date的范围,可选参数为min、max

email

检查输入是否为E-mail格式

url

检查输入是否为url格式

conversion

检查是否将出现数据转换错误

expression/fieldexpression

检查某个布尔表达式的值是否为true,后者绑定到某个字段上,参数为expression

visitor

使用预定义的validators进行验证,参数为context

regex

检查是否能匹配到正则表达式,参数为regex

17.3.4  使用@Java注解配置Validator

Struts 2也支持用Java注解配置数据校验。Action同样需要继承自ActionSupport类,并用@Validation注解,表示该Action需要数据校验。然后在方法上配置@Validations。@Validations可指定多条校验规则,具体的配置见下面的代码:

代码17.11  BookAction.java

package com.helloweenvsfei.struts2.action;

import org.apache.struts2.interceptor.validation.SkipValidation;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.validator.annotations.DateRangeFieldValidator;

import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;

import com.opensymphony.xwork2.validator.annotations.Validation;

import com.opensymphony.xwork2.validator.annotations.Validations;

import com.opensymphony.xwork2.validator.annotations.ValidatorType;

@Validation                                         // 标记为需要数据校验

public class BookAction extends ActionSupport { // 继承自ActionSupport

    // 添加书籍页面

    @Validations(

            requiredStrings = {

                    @RequiredStringValidator(type = ValidatorType.SIMPLE,                   trim=true, fieldName = "book.name", message = "请输入                       书籍名称. *"),

                    @RequiredStringValidator(type = ValidatorType.SIMPLE,                   trim=true, fieldName = "book.author", message = "请输                       入书籍作者. *")

                    },

            dateRangeFields = {@DateRangeFieldValidator(type = Validator                Type.SIMPLE, fieldName = "book.publishedDate", min = "1900-01-           01", max = "2200-01-01", message = "日期必须大于 ${min} 小于             ${max}, 当前值为 ${book.publishedDate}.")}

    )

    public String add() {

        bookList.add(book);

        title = "<br/><br/>添加书籍成功<br/><br/>";

        return "success";

    }

   

    @SkipValidation                     // 书籍列表,@SkipValidation跳过校验

    public String list() {

        return "list";

    }

}

该配置与上面的XML配置是等价的。因为只对addBook.action进行校验,因此只在方法add()上添加了@Validations以及校验规则。其他不需要校验的方法需要加上@SlipValidation,否则也会被校验。

另外,使用@Validator时Struts 2默认的验证方式是全局验证模式,因此只能配置一种验证方式。如果要对同一个Action的两个方法配置两种不同的验证方式,需要重写Struts 2的默认拦截器。

%注意:被校验的Action要继承ActionSupport类,并要在action配置中指定名为input的JSP,因为Struts 2在校验失败后会自动返回input页面。

这篇关于使用Validator校验数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/933464

相关文章

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文