文档库 最新最全的文档下载
当前位置:文档库 › Struts2内建校验器

Struts2内建校验器

Struts2内建校验器
Struts2内建校验器

Struts2内建校验器

10.4 内建验证器

10.4.1概述

Struts2的验证框架已经为我们建立了足够多的内建验证器,以满足不同的验证要求,接下来就来逐一学习这些内建的验证器。

Struts2的内建验证器的声明文件被放置在xwork-core-2.1.6.jar文件中,其位置为

/com/opensymphony/xwork2/validator/validators/default.xml,内容为:

java代码:

查看复制到剪贴板打印

1.

2.

3."-//OpenSymphony Group//XWork Validator Config 1.0//EN"

4."https://www.wendangku.net/doc/5d3367457.html,/xwork/xwork-validator-config-1.0.dtd">

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

在这个文件中,每个内建验证器都以一个元素出现,其name属性为验证器的名字,而class属性为这个验证器的实现类。注意:在前面的配置中也接触到了元素,但是此元素是在定义一个验证器,而不是像前面那样,是在引用一个验证器。

10.4.2类型转换错误验证器(conversion)

conversion验证器用来验证类型转换时是否出错。如果一个类型为int的参数接到了“18a”这个字符串,conversion验证器就会报错。

conversion验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.3整数验证器(int)

int验证器用来验证一个整数型参数是否在指定的范围内。如果一个已经被成功转换为int的属性不在验证器指定的范围内,int验证器就会报错。

int验证器可以有两个参数:

?min用来指定可接受范围的最小值。

?max用来指定可接收范围的最大值。

注意:conversion验证器验证的是参数能不能被正确转化为整数,int验证器是在参数已经被正确的转化为整数之后,再考察它的范围。因此,如果想限制年龄文本框填入整数类型的数字,并且在18岁以上,需要先引用conversion验证器检查用户填入的是否是一个整数,然后再引用int验证器来检查用户填入的年龄是否大于等于18。

int验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.4短整数验证器(short)和长整数验证器(long)

short验证器和long验证器与int验证器非常相似,都是用来验证参数是否在指定范围之内,就不去赘述了。

short验证器和long验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.5日期验证器(date)

date验证器用来验证一个日期型参数是否在指定的范围内。如果一个已经被成功转换为date的属性不在验证器指定的范围内,date验证器就会报错。

date验证器可以有两个参数:

?min用来指定可接受范围的最小值。

?max用来指定可接收范围的最大值。

注意:指定日期范围的时候,需要使用统一的格式,比如用MM/DD/YYYY的格式等。

date验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.6双精度浮点验证器(double)

double验证器用来验证一个双精度浮点型参数是否在指定的范围内。如果一个已经被成功转换为double的属性不在验证器指定的范围内,double验证器就会报错。

double验证器可以有四个参数:

?minInclusive用来指定可接受范围的最小值,包含给定值。

?maxInclusive用来指定可接收范围的最大值,包含给定值。

?minExclusive用来指定可接受范围的最小值,不包含给定值。

?maxExclusive用来指定可接收范围的最大值,不包含给定值。

double验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.7邮件验证器(email)

email验证器用来验证一个参数是否为邮箱地址。

email验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.8 URL验证器(url)

url验证器用来验证一个参数是否为合法的URL。

url验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.9必填验证器(required)

required验证器用来验证一个参数是否不为null。

required验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.10必填字符串验证器(requiredstring)

requiredstring验证器用来验证一个字符串参数是否非空,既不为null,且长度大于0。

requiredstring验证器只有一个参数:

?trim:是否去掉字符串两边的空白,默认为true。

requiredstring验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.11字符串长度验证器(stringlength)

stringlength验证器用来验证一个字符串的长度是否在指定范围内。

stringlength验证器有三个参数:

?maxLength:字符串长度的最大值。

?minLength:字符串长度的最小值。

?trim:是否去掉字符串两边的空白,默认为true。

stringlength验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.12正则表达式验证器(regex)

regex验证器用来验证一个字符串是否符合一个正则表达式的要求。

regex验证器有三个参数:

?expression:必填参数,正则表达式。

?caseSensitive:是否检查大小写。

?trim:是否去掉字符串两边的空白,默认为true。

regex验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.13字段表达式验证器(fieldexpression)和表达式验证器(expression)

fieldexpression验证器中必须指定一个返回布尔值的ognl表达式,根据这个表达式的值来确定是否符合条件。

fieldexpression验证器只有一个参数:

?expression:返回布尔值的ognl表达式,可以在这个ognl表达式中访问当前的值栈。

regex验证器既可以用于字段验证器,又可以用于动作验证器。

表达式验证器(expression)与字段表达式验证器(fieldexpression)类似,同样使用expression参数来指定返回布尔值的ognl表达式,但是,只能用于动作验证器。

10.4.14访问者验证器(visitor)

visitor验证器用于验证Action中的复合属性,可以直接把验证信息放到域对象中去注册,这样就使得同包内的不同Action在验证同一个域对象时,不用注册重复的验证信息。

vistior验证器有两个属性:

?context:引用的域对象验证信息文件上下文名。

?appendPrefix:是否在错误信息中添加元素指定的前缀。

来示例一下,仍然要检查user.age大于等于18岁。保持Action不变,修改一下原来的验证信息文件,示例如下:

java代码:

查看复制到剪贴板打印

1.

2.

3.

4. c1

5. true

6. 用户

7.

8.

9.

上面的示例,在user字段上指定了一个visitor验证器,设置上下文的名称为c1,设置前缀为true,也就是说在发生错误的时候,要在c1上下文返回的错误信息前加上“用户”这个前缀。

接下来新添一个上下文验证文件,其文件名为“字段的简单类名-上下文名-validation.xml”,比如现在要为user属性指定一个名为c1的上下文,所以文件名为UserModel-c1-validation.xml,放在与域对象同级的包内,即UserModel所在的包内,注意:不再是与Action同级的包内了,其内容示例为:

java代码:

查看复制到剪贴板打印

1.

2.

3."-//OpenSymphony Group//XWork Validator 1.0//EN""http://www.ope

https://www.wendangku.net/doc/5d3367457.html,/xwork/xwork-validator-1.0.2.dtd">

4.

5.

6.

7.

8. 18

9. 年龄要大于等于18

10.

11.

12.

它的本质也是一个验证文件,与之前直接在RegisterAction-validation.xml直接写出对user.age 的验证相比,没有本质上的区别,只是这个文件以UserModel类为验证的根,所以元素的name属性直接写age就可以了,而不再是原来的user.age。至于使用验证器的方式和配置都不变,就不去赘述了。

私塾在线网站原创《研磨struts2》系列

Struts2之输入校验

一、Struts2输入校验介绍 Struts2的输入校验和类型转换都是对请求参数进行处理。 输入校验顾名思义就是请求参数是否能够满足一定的要求; 客户端校验&服务器端校验 客户端校验是指在浏览器这端通过Javascript进行初步校验,为了减轻服务器端的负载;服务器端校验是校验数据的最后一道防线; 在Struts2中,数据校验不需要写任何代码,只需要一个配置文件,配置校验的条件就可以了,非常简单;因此数据校验文件是数据校验的最重要的内容; 二、数据校验规则文件 1.数据校验规则文件规则: 1.此文件中规定了参数的一些校验条件; 2.可以包括字段型校验器和非字段型校验器; 3.命名规则:ActionName-validation.xml,其中ActionName是Action类的名字; 4.每个Action都有一个validation文件,规则文件放在和Action同目录下; 5.在前面我们讲到的配置逻辑action中,如果需要对某个逻辑Action配置数据校验文件,则命名规则为:ActionName-LogicActionName-validation.xml; 6.注意:当需要对逻辑action进行校验时,如果存在一般形式的ActionName-validaton.xml 文件,则也会对此逻辑Action进行校验; 7.输入校验失败后,和类型转换一样,会将错误封装成fieldError,并放入Action Context 中,因此在JSP中添加可显示错误,此内容也是我们在数据校验文件中配置的; 8.当输入校验失败后,和类型转换一样,返回逻辑视图为input,因此在struts.xml中必须配 9.输入校验失败后,struts表单标签也会自动输出错误提示; 字段型校验器&非字段型校验器 字段型校验器:以每个Action属性为一个单位进行编写,即以如下风格编写:

Struts2校验器类型详解

Struts2校验器类型详解 一、Struts2内建校验器 位于xwork-2.0.4.jar压缩包中(com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框架内建的校验器。default.xml文件定义了常用的校验器类型。 首先搞清楚: struts2字段校验器与非字段校验器的区别 字段校验器配置格式: 参数值 .................... 校验失败后的提示信息 非字段校验器配置格式:

需要被校验的字段 参数值 校验失败后的提示信息 非字段校验:先指定校验器:由谁来校验,来校验谁! 字段校验器:先指定校验的属性:我来校验谁,由谁来校验! 下面是对应在包中的类:

struts2复习题(含答案)

Struts2复习题 1.以下属于struts2的控制器组件是: A.Action B.ActionForm C.ActionServlet D.dispatchAction 2.以下属于struts2的体系结构的是:(多选) A.struts2控制器组件 B.struts2配置文件 C.FilterDispathcer D.Action 3.以下属于struts2配置文件中的配置元素是:(多选) A. B. C. D. 4.关于struts1和struts2对比的说法正确的是: A.struts1要求Action类继承struts1框架中的Action父类,struts2中则不一定需要继承,可以是POJO类 B.struts1中的Action不是线程安全的,而struts2中的Action是线程安全的 C.struts1和struts2中都使用ActionForm对象封装用户的请求数据 D.struts1使用OGNL表达式语言来支持页面效果,struts2通过ValueStack技术使标签库访问值 5.以下关于ValueStack说法正确的是:(多选) A.每个Action对象实例拥有一个ValueStack对象 B.每个Action对象实例拥有多个ValueStack对象 C.Action中封装了需要传入下一个页面的值,这些值封装在ValueStack对象中 D.ValueStack会在请求开始时被创建,请求结束时消亡 6.关于struts2配置文件说法正确的是: A.必须在WEB-INF/classes目录下 B.名字必须为struts.xml C.配置Action时,必须配置包信息 D.使用元素配置转发 7.在struts2配置中用()元素来配置常量: A. B. C. D. 8.关于struts2包的说法正确的是: A.struts2框架使用包来管理常量 B.struts2框架定义包时必须指定name属性 C.struts2框架中配置包时,必须继承自struts-default包,否则会报错 D.struts2框架中使用包来管理Action 9.struts2中获取Servlet API的方法正确的是:(多选) A.使用ActionContext对象以解耦合的方法访问Servlet API B.使用ServletActionContext对象以解耦合的方式访问Servlet API C.使用ActionContext对象以耦合的方式访问Servlet API D.使用ServletActionContext对象以耦合的方式访问Servlet API 10.struts2动态调用的格式为: A.ActionName?methodName.action B.ActionName! methodName.action C.ActionName*methodName.action D.ActionName@mathodName.action 11.如果要实现struts2的数据校验功能 A.普通Action类可以实现

struts2 实验报告

1.系统分析与设计 1.1 系统功能描述 本系统是个非常简单的注册、登录系统。本系统的实现是基于Struts2、Spring、Hibernate 三个框架,系统功能单一,业务逻辑简单。 当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。 当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。 系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。 系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。 当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。 除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。 1.2 系统功能流程

1.3 数据库设计 相关的映射文件: 一旦提供了上面的映射文件,Hibernate 就可以理解User 和user_table 之间的对应关系。 2.系统实现与测试 2.1 系统采用的关键技术 MVC 框架采用了Struts2框架,Struts2框架的易用性,极好的简化了系统的MVC 层的实现;本系统使用了Struts2的JSON 插件来完成Ajax 功能,除此之外本系统为了避免进行底层的Ajax 交互,还是用了一个简单Prototype.js 函数库,用以简化Ajax 编程。Struts2框架的稳定性,为系统的稳定运行提供了保证。

Struts2校验器类型

Struts2校验器类型 10.3 验证器类型 可以把验证器类型分为两种:字段验证器和动作验证器。其中,字段验证器就像前面演示的那样,只验证提交的表单内的单个字段;而动作验证器一般验证提交的表单内的多个字段的关系,比如,录入产品信息的时候,产品的进价不能高于售价。 无论是哪种验证器,都需要考虑以下几个问题: ?验证谁? ?使用什么条件验证? ?不满足条件显示什么结果? ?不满足验证条件时显示的结果出现在页面的什么位置? 10.3.1字段验证器 字段验证器用来验证提交的表单内的单个字段,如同前面的示例,在验证文件里: java代码: 查看复制到剪贴板打印 1. 2. 3. 4. 18 5. 年龄必须在18岁以上,您输入的是${user.age} 6. 7. 8. ?元素作为整个验证文件的根元素。 ?元素的子元素就是字段验证器,元素的name属性就是这个字段验证器要验证的哪个字段。 ?一个元素可以有多个元素。 ?每一个元素是对这个字段的一种验证条件,它的type属性就是具体的验证器,在这里引用了内置的int验证器。 ?还可以给元素添加子元素来设置验证条件的参数,添加子元素来设置验证错误时返回的信息。在元素中写出的文本将直接作为错误信息返回,如果元素存在key属性,它将引用国际化信息。 除了以上的这种写法,还有另外一种注册的方式,虽然写出来的xml配置不同,但是所需要的参数,以及运行时所起的作用都和以上的写法一模一样: java代码: 查看复制到剪贴板打印 1.

struts2面试题(自己总结)

Struts2面试题 1、struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,

包含了框架内部的控制流程和处理机制。 业务控制器Action和业务逻辑组件是需要用户来自己实现的。 用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件, 供核心控制器FilterDispatcher来使用。 Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同, 所以说Struts 2是WebWork的升级版本。基本简要流程如下: 1 、客户端初始化一个指向Servlet容器的请求; 2、这个请求经过一系列的过滤器(Filter) (这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器, 这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3 、接着FilterDispatcher被调用, FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4、如果ActionMapper决定需要调用某个Action, FilterDispatcher把请求的处理交给ActionProxy 5、ActionProxy通过Configuration Manager询问框架的配置文件, 找到需要调用的Action类 6、ActionProxy创建一个ActionInvocation的实例。 7、ActionInvocation实例使用命名模式来调用, 在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP 或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 9、响应的返回是通过我们在web.xml中配置的过滤器 10、如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。 2、说下Struts的设计模式 MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生 成动态的网页,返回给客户。

STRUTS2模拟(答案)

STRUTS2模拟测试(开卷——定时90分钟) 一、填空题 1.Struts2框架由___Struts1________和____WebWork_______框架发展而来。(Struts&WebWork ) 2.Struts2以___WebWork______为核心,采用____拦截器_______的机制来处理用户的请求。(WebWork,拦截器)3.构建Struts2应用的最基础的几个类库是struts-core-2.1.6.jar___________、__xwork-2.1.2.jar_________、__ognl-2.6.11.jar_________ 、_freemarket-2.3.13、_commons-logging-1.0.4.jar_________以及 ___commons-fileupload-1.2.1.jar________。 4.Struts2中的控制器类是一个普通的_____class______。Class 5.如果要在JSP页面中使用Struts2提供的标签库,首先必须在页面中使用taglib编译指令导入标签库,其中taglib编译指令为_<%@ taglib prefix=”s” uri=”/struts-tags”%>__________。<%taglib uri="/struts-tags" prefix="s"%> 6.在Struts2表单标签库中,表单标签为___________。 7.ActionSupport类实现了____Action_______接口和_Validateable__________等接口。 8.通过控制器类中的___validate()________方法来输出校验错误信息。 二、选择题 1.不属于Action接口中定义的字符串常量的是_____B______。B A.SUCCESS B.FAILURE C.ERROR D.INPUT 2.在控制器类中一般需要添加相应属性的____A_______和____C_______。AC A.setter方法 B.as方法 C.getter方法 D.is方法 3.控制器需要在____B_______配置文件中进行配置。B A.web.xml B.struts.xml C.struts2.xml D.webwork.xml 4.不属于Struts 2表单标签库的是_____D______。D A. B. C. D. https://www.wendangku.net/doc/5d3367457.html,ername 显示效果如下:

上面的差不多是Struts默认显示的两种方式,但是我们常见的显示方式并不是这样的,所有我们需要自定义这种格式,我们的习惯是把错误信息显示在某个出错字段的后面,一行显示,而它给了一个小黑点并且换了行,我们现在就来解决这个问题。 这个问题困扰了我很久,真的很久以前想过,但是没有彻底地解决,一直留到现在,今天在google上搜了很久,终于给解决了,现在分享一下解决的途径。 先提供网上的思路给大家(关键解决的思路) 1.struts2表单验证_错误信息的显示问题中提到 引用 10 楼 starwar2030 的回复: 可以在CSS中定义 .formFieldError { font-family: verdana, arial, helvetica, sans-serif; font-size: 12px; color: #FF3300; vertical-align: bottom; } .formFieldError ul{ margin: 0px; padding: 3px; vertical-align: middle; } 而后使用类似用

相关文档