Struts2校验器类型详解
Strust2 数据校验

Strust2-数据校验一. ActionSupport是个工具类,他实现了Action, Validatable等接口, Validatable提供validate()方法进行数据验证.Action只要继承ActionSupport类,重写validate()方法就可以进行数据验证二. 校验的流程首先,Struts框架对输入数据进行类型转换,然后再进行数据校验,如果类型转换与数据校验都没有错误发生, 就进入execute(),否则请求将被转发到input视图三. 注册实例1. register.jsp[html]view plaincopy1.<span style="font-size:16px;"><%@ page language="java"contentType="text/html; charset=utf-8"%>2.<%@ taglib prefix="s"uri="/struts-tags"%>3.<html>4.<head>5.<title>Insert title here</title>6.</head>7.<body>8.<s:form action="register"method="post">9.<s:textfield name="name"label="姓名"required="true"/>10.<s:textfield name="age"label="年龄"required="true"/>11.<s:submit value="提交"></s:submit>12.</s:form>13.</body>14.</html>15.</span>2.当姓名和年龄提交时候,用RegistAction类来获取数值:RegistAction.java[html]view plaincopy1.<span style="font-size:16px;"> 1: public class RegistAction extends ActionSupport {2. 2: private String name;3. 3:4. 4: private int age;5. 5:6. 6: ...//省略name,age的setter,getter方法7. 7:8. 8: public String execute() {9. 9: return SUCCESS;10. 10: }11. 11:12. 12: public void validate() {13. 13: if ("".equals(name)) {14. 14: this.addFieldError("name", "用户名不能为空");15. 15: }16. 16: if (name.length() > 6) {17. 17: this.addFieldError("name", "用户名长度不能超过5位");18. 18: }19. 19:20. 20: if (age <1 || age > 150) {21. 21: this.addFieldError("age", "年龄范围必须在1~150之间");22. 22: }23. 23: }24. 24: }25.</span>[html]view plaincopy1.<span style="font-size:16px;">.struts.xml2.3. 1: <package name="test1"extends="struts-default"namespace="test1">4. 2: <action name="register1"class="test1.RegistAction">5. 3: <result name="input">register.jsp</result>6. 4: <result name="success">../success.jsp</result>7. 5: </action>8. 6: </package>9.</span>[html]view plaincopy1.<span style="font-size:16px;">4.success.jsp2.3. 1: <%@ page contentType="text/html;charset=GBK"%>4. 2: <%@ taglib prefix="s"uri="/struts-tags" %>5. 3: <s:property value="name"/>,欢迎您登录!6.7.</span>如果name和age都不输入,则会执行Action中的校验方法,会提示用户名不能为空如果不输入userName, age输入为abc,会提示Invalid field value for field "age".username is empty1. 其中Invalid field value for field "age" 信息是struts2通过内置的类型转换器进行类型转换时,如果不能成功转换, struts2框架自动生成一条错误信息,并将该错误信息放到addFieldError里面,这种默认的输出信息格式是在xwork-2.0.4.jar中定义的.com/opensymphony/xwork2/xwork-messages.properties文件中有一条xwork.default.invalid.fieldvalue=Invalid field value for field "{0}".2. 这是一种全局的错误提示方式,整个系统中只要是字段类型转换错误都会这样提示,我们也可以改变这种输出格式,只要在全局的国际资源文件中重写xwork.default.invalid.fieldvalue就可以了.实现方式:在struts.xml中加入<constant name="struts.custom.i18n.resources"value="messageResource"></constant>或者也可以在struts.properties中加入struts.custom.i18n.resources=messageResource指定国际化资源文件名为messageResource. Properties新建messageResource. Properties资源文件并添加数据xwork.default.invalid.fieldvalue={0} failure 修改之后字段类型转换错误提示为: {0} failure3 所有的类型转换失败后,struts2会将基本类型设置为0,对象类型设置为null,这里的age的类型为Integer,当类型转换失败age值为null,如果age的类型为int,那么转换失败后值为04.这种提示信息不够友好,也可以定义局布的提示信息,为每一个Action新建一个properties文件,文件名为XXX.properties(Action名.properties)实现方式:新建RegistAction.properties并添加invalid.fieldvalue.age=age errorinvalid.fieldvalue.birthday=birthday error其中age和birthday分别为字段的名称四.Struts2也提供类似BaseDispatchAction的功能1.<span style="font-size:16px;">1: package com;2. 2:3. 3: import com.opensymphony.xwork2.ActionSupport;4. 4:5. 5: public class Regist2Action extends ActionSupport {6. 6:7. 7: private String userName;8. 8:9. 9:10. 10:11. 11: public String getUserName() {12. 12:13. 13: return userName;14. 14:15. 15: }16. 16:17. 17: public void setUserName(String userName) {18. 18:19. 19: erName = userName;20. 20:21. 21: }22. 22:23. 23: public String regist() throws Exception {24. 24:25. 25: System.out.println("注册成功-regist");26. 26:27. 27: return SUCCESS;28. 28:29. 29: }30. 30:31. 31:32. 32:33. 33: public void validateRegist() {34. 34:35. 35: if(userName.equals("")){36. 36:37. 37: addFieldError("userName", "请输入用户名-registValidate");38. 38:39. 39: }40. 40:41. 41: }42. 42:43. 43: }44. 44:45. 45: <action name="regist2"class="com.Regist2Action"method="regist">46. 46: <result name="success">/welcome.jsp</result>47. 47: <result name="input">/regist2.jsp</result>48. 48: </action>49.</span>指定了method为regist,当请求时会执行regist(),不会再去执行默认的execute()方法了, validateRegist()方法是专门针对regist校验的.(格式为validate+方法名)。
Struts2内建校验器

Struts2内建校验器10.4 内建验证器10.4.1概述Struts2的验证框架已经为我们建立了足够多的内建验证器,以满足不同的验证要求,接下来就来逐一学习这些内建的验证器。
Struts2的内建验证器的声明文件被放置在xwork-core-2.1.6.jar文件中,其位置为/com/opensymphony/xwork2/validator/validators/default.xml,内容为:java代码:查看复制到剪贴板打印1.<?xml version="1.0" encoding="UTF-8"?>2.<!DOCTYPE validators PUBLIC3."-//OpenSymphony Group//XWork Validator Config 1.0//EN"4."/xwork/xwork-validator-config-1.0.dtd">5.6.<!-- START SNIPPET: validators-default -->7.<validators>8. <validator name="required"class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>9. <validator name="requiredstring"class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>10. <validator name="int"class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>11. <validator name="long"class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>12. <validator name="short"class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>13. <validator name="double"class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>14. <validator name="date"class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>15. <validator name="expression"class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>16. <validator name="fieldexpression"class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>17. <validator name="email"class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>18. <validator name="url"class="com.opensymphony.xwork2.validator.validators.URLValidator"/>19. <validator name="visitor"class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>20. <validator name="conversion"class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>21. <validator name="stringlength"class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>22. <validator name="regex"class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>23. <validator name="conditionalvisitor"class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>24.</validators>25.<!-- END SNIPPET: validators-default -->在这个文件中,每个内建验证器都以一个<validator>元素出现,其name属性为验证器的名字,而class属性为这个验证器的实现类。
软件开发框架(J2EE)Struts 2内置校验器

必填字符串校验器实例
1. 修改上例中校验规则文件ProductAction-validation.xml。
2. 运行程序,请求add_pro.jsp,查看必填字符串校验器的用 法。
软件开发框架(J2EE)
字符串长度校验器
• 字符长度校验器(stringlength)用于确保字段必须满足指定的 长度范围,否则校验失败。此校验器的参数如下:
参数名
必选 类型
பைடு நூலகம்
说明
maxLength 否
minLength 否
trim
否
Integer Integer Boolean
用于指定字符串的最大长度。若不指定, 则表示字符串的最大长度不限
用于指定字符串的最小长度。若不指定, 则表示最小长度不限
表示在校验此字符串之前,删除字符串的 首尾空格,默认值为true
• 实例:对商品名称进行非空字符串校验。本例通过在校验规则文件
中使用requiredstring校验器,对商品名称进行非空字符串校验。
• 步骤:
1. 修改上例中校验规则文件ProductAction-validation.xml
2. 运行程序,请求add_pro.jsp,查看必填字符串校验器的用法
软件开发框架(J2EE)
max
否
min
否
类型 date
date
说明
用于指定被校验属性的最大日期值。若不指定,则表示 最大日期值不限
用于指定被校验属性的最小日期值。若不指定,则表示 最小日期值不限
• 实例:对学生的出生日期进行校验。本例通过使用date校验器对新
添加学生的出生日期进行校验,使其出生日期必须在1985-0101~1994-12-31之间。
[精华]Struts2.O内置校验器
![[精华]Struts2.O内置校验器](https://img.taocdn.com/s3/m/0d49782deffdc8d376eeaeaad1f34693daef10d5.png)
Struts 2.O内置校验器(checker)Struts 2.0框架提供了大量的内置校验器,实际中的大部分校验需求都可以通过内置校验器来完成,开发者只需配置好这些校验器即可。
内置校验器就是struts框架提供的有各种校验功能的类。
Struts 2.0的内置校验器有很多,比较常用的有:必填校验器(required);必填字符串校验器(requiredstring);字符串长度校验器(stringlength);整数校验器(int);日期校验器(date);邮件地址格式校验器(email);网址格式校验器(url);转换校验器(conversion);表达式校验器(expression);字段表达式校验器(fieldexpression);正则表达式校验器(regex) ;等。
要想使用内置校验器,需要为你的Action创建校验器配置文件(xml文件),文件名的规定为:<Action的名字>-validation.xmlStruts 2.0提供了两种风格的校验配置文件,两种风格的本质是一样的。
即:●字段校验器配置风格,基于Action的属性名。
(建议用这个)●校验器字段配置风格,基于校验器名。
一、字段校验器配置风格(风格一)在<validators…/>元素内,以<field name="..."/>元素为基本元素,形式如下:<validators><field name="被校验的属性名1"><field-validator type="校验器名"><param name="参数名">参数值</param><!…可以有多个参数---><message>校验失败的显示信息</message></field-validator></field><field name="被校验的字段名2">……………………</field></validators>二、校验器字段配置风格(风格二)在<validators…/>元素内,以<validator type="..."/>元素为基本元素,形式如下:<validators><validator type="校验器名"><param name="fieldName">字段名1</param><message>效验失败的显示信息< /message></validator><validator type="校验器名"><param name="fieldName">字段名2</param><message>效验失败的显示信息< /message></validator>……………………</validators>三、例1、使用“必填字符串校验器(requiredstring)”和“字符串长度校验器(stringlength)”为表单的输入进行校验,采用风格一。
struts2数据验证

struts2的核心是从webwork演变来的,其数据验证框架其实就是原webwork的那一套东西。
一,Struts2数据验证的整体框架介绍struts2的action都要继承ActionSupprot类,这个类实现了Validateable 与ValidationAware这两个跟数据验证有关的接口。
其中Validateable只有一个方法validate()用于数据验证;ValidationAware则用于记录验证出错时的相关信息。
而数据验证在什么时候被调用呢?数据验证的调用是包装在workflow拦截器里,我们看看workflow拦截器在struts_default.xml中的定义,它是放在默认的defaultStack拦截器组里,相关顺序如下:<interceptor-ref name="params"/><interceptor-ref name="conversionError"/><interceptor-ref name="validation"/><interceptor-ref name="workflow"/>params与conversionError这两个拦截器在workflow的前面,它们的工作是从request中把数据转成正确的Java类型数据,以供后面处理。
validation 拦截器实质是AnnotationValidationInterceptor与我们这里谈的数据验证不是一回事,它只判断有没有@SkipValidation注解,如果有就不会路过数据验证,只是起一个开关作用。
当workflow拦截器触发时,它先检查当前请求的action是否实现了Validateable接口,如果实现了该接口,则调用validate()方法:如果这个方法处理时发现有数据验证不通过,则会生成一个错误信息并交给ValidationAware的方法去存储这些出错信息。
第4章 Struts 2的输入校验

清华大学出版社
regex(正则表达式校验器)
• <field-validator type="regex"> • <param name="expression"><![CDATA[^1[3578]\d{9}$]]></param> • <message>手机号格式不正确!</message> • </field-validator>
• • • • • • • • • •
无限挑战 无限飞翔
Struts 2框架应用教程
清华大学出版社
required(必填校验器)
• <field-validator type="required"> • <message>性别不能为空!</message> • </field-validator>
7.1.2
服务端校验
• 服务器端校验对于系统的安全性、完整性、健壮性起到了 至关重要的作用。Struts 2框架是非常强大的,它提供了 一套验证框架,通过验证框架能够非常简单和快速地完成 输入校验。 • 在服务器端,对于输入校验Struts 2提供了两种实现方法 :一是采用手工编写代码实现(手工编程),二是基于 XML配置方式实现(Struts 2校验框架)。
• • • • • 1.创建JSP页面practice724733.jsp,该页面与practice724.jsp页面完全一样,唯一不 同的就是表单的action属性值。该页面的action属性值practice724733.action 。 2.创建Action类Practice724733Action.java 3.在action包下编写校验文件Practice724733Action-validation.xml 4.配置Action 5.校验显示效果
Java Struts2 输入校验器大全

Struts2 输入校验器大全技术要点介绍Struts2 自带的输入校验器。
演示代码在xwork-2.0.4.jar 包中,请读者在\com\opensymphony\xwork2\validator\validators 路径下找一个名字为“ default.xml ”的xml 文件。
在该文件中有所有Struts2 自带的输入校验器定义。
具体代码如下:Java代码1. <!-------------文件名:default.xml-------->2. …………3. <validators>4. <validator name="required"5. class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>6. <validator name="requiredstring"7. class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>8. <validator name="int"9. class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>10. <validator name="double"11. class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>12. <validator name="date"13. class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>14. <validator name="expression"15. class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>16. <validator name="fieldexpression"17. class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>18. <validator name="email"19. class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>20. <validator name="url"21. class="com.opensymphony.xwork2.validator.validators.URLValidator"/>22. <validator name="visitor"23. class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>24. <validator name="conversion"25. class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>26. <validator name="stringlength"27. class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>28. <validator name="regex"29. class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>30. </validators>以上代码是所有Struts2 输入校验器的定义,下面将这些输入校验器(一共有13 个)的字段和非字段格式的校验形式写在如下,本例中没有程序代码示例,所有输入校验器的应用代码都是笔者自己定义的。
struts2中所有方法进行输入校验

拦截器将异常封装到filedErrors里。不管类型转换是否出现异常,都会进入第3步。
3.系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名。
4.再调用action中的validate()方法。
5.经过上面4步,如果系统中的filedErrors存在错误信息(即存放错误信息的集合的size大于0),
系统自动将请求转发至名称为input的视图。如果系统中的filedErrors 没有任何错误信息,系统将执行
action中的处理方法。
return username;
}
public void setUsername(String username){
ername = username;
}
public String getMobile(){
return mobile;
}
public void setMobile(String mobile){
对指定方法进行校验
validate.Xxx
public void validateUpdate(){ //重写,会对action 中的指定方法进行校验
==========================
输入校验的流程:
1.类型转换器对请求参数执行类型转换,并把转换后的值赋给action属性。
import com.opensymphony.xwork2.ActionSupport;
pubilc class PersonAction extends ActionSupport{
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Struts2校验器类型详解一、Struts2内建校验器位于xwork-2.0.4.jar压缩包中(com.opensymphony.xwork2.validator.validators)有个文件default.xml ,该文件中定义了Struts2框架内建的校验器。
default.xml文件定义了常用的校验器类型。
首先搞清楚:struts2字段校验器与非字段校验器的区别字段校验器配置格式:<field name="被校验的字段"><field-validator type="校验器名"><!--此处需要为不同校验器指定数量不等的校验规则--><param name="参数名">参数值</param>....................<!--校验失败后的提示信息,其中key指定国际化信息的key--><message key="I18Nkey">校验失败后的提示信息</message><!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarker template Error--></field-vallidator><!-- 如果校验字段满足多个规则,下面可以配置多个校验器--></field>非字段校验器配置格式:<validator type="校验器名"><param name="fieldName">需要被校验的字段</param><!--此处需要为不同校验器指定数量不等的校验规则--><param name="参数名">参数值</param><!--校验失败后的提示信息,其中key指定国际化信息的key--><message key="I18Nkey">校验失败后的提示信息</message><!--校验失败后的提示信息:建议用getText("I18Nkey"),否则可能出现Freemarker template Error--></validator>非字段校验:先指定校验器:由谁来校验,来校验谁!字段校验器:先指定校验的属性:我来校验谁,由谁来校验!下面是对应在包中的类:<validators><validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/><validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/><validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/><validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/><validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/><validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/><validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/><validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/><validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/><validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/><validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/><validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/><validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/><validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/><validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/><validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/></validators>二、各种类型校验器1、类型转换检验器:(1)非字段校验:<validator type="conversion"><param name="fieldName">myField</param><message>类型转换错误</message><param name ="repopulateField">true</param></validator>(2)字段校验:<field name="myField"><field-validator type="conversion"><message>类型转换错误</message><param name ="repopulateField">true</param></field-validator></field>fieldName:该参数指定检查是否存在转换异常的字段名称,如果是字段校验,则不用指定该参数。
repopulateField:该参数指定当类型转换失败后,返回input页面时,类型转换失败的表单是否保留原来的错误输入。
true为保留,false为不保留。
2、日期校验器:(1)非字段校验:<validator type="date"><param name="fieldName">birthday</param><param name="min">1990-01-02</param><param name="max">2010-07-28</param><message>生日数据错误</message></validator>(2)字段校验:<field name="birthday"><field-validator type="date"><param name="min">1990-01-01</param><param name="max">2010-07-28</param><message key="error.birthday"></message> </field-validator></field>min:指定字段日期值的最小值,该参数为可选参数。