Struts2校验器类型详解

合集下载

Strust2 数据校验

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内建校验器

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内置校验器

软件开发框架(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内置校验器

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数据验证

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的输入校验

第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 输入校验器大全

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中所有方法进行输入校验

struts2中所有方法进行输入校验
2.如果在执行类型转换的过程中出现异常,系统会将异常信息保存到ActionContext,conversionError
拦截器将异常封装到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{

struts2中方法验证的三种形式

struts2中方法验证的三种形式
<result>/success.jsp</result>
<result name="input">/index.jsp</result>
<interceptor-ref name="defaultStack">
<param name="validation.excludeMethods">*</param>
如果有多个方法,方法名以“,”隔开,例如要验证add和delete方法:
<param name="validation.includeMethods">add,delete</param>
1,采用注解annotation形式:在不需要验证的方法前加上@SkipValidation
2,针对每一个需要验证的方法单独生成一个配置文件,例如在UserAction中有两个方法add()和delete()
并且我们假设只对add()方法进行校验,配置如下:
-------------------------------struts.xml----------------------------------------------
<result>/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
<!-- 配置这个action主要是为了让其他的请求能进入其他的方法 -->
<action name="user_*" class="erAction" method="{1}">

第4章 Struts 2输入校验

第4章  Struts 2输入校验

4.2.1 正则表达式
客户端校验一般都使用JavaScript来进行输入的 校验。JavaScript对输入判断都会使用到正则表 达式。正则表达式是字符串处理的利器,功能非 常强大。 正则表达式的功能非常强大,通过它可以进行字 符串匹配、字符串查找、字符串替换。今天重点 介绍字符串的匹配功能,字符串的匹配功能对于 输入校验提供了很大的帮助。先看下面简单的正 则表达式的示例。 正则表达式:a.b 匹配abb,acb,等 “.“是正则表达式的特殊字符,它的含义是匹配 所有的字符还有空格和Tab键。
4.4.3 校验动态方法
前面介绍的在一个Action中包含多个处理逻辑,不同处理逻辑对 应不同的方法。那如何定义输入校验来校验这些处理逻辑呢? 下面来看一个简单示例,首先将上一示例中的Action中添加一个 validate()方法,该方法将在控制台上简单的打印一句话,代码 如下所示。 public void validate() { System.out.println("validate method"); } 这里为了简单测试,并不输入任何的用户信息。直接单击“注册” 按钮,在控制台将打印如下语句: validate method execute method 从控制台打印的语句可以看出,在Action中首先执行了validate() 校验方法,然后再执行execute()处理逻辑方法。如果单击“删除” 按钮,在控制台将打印如下语句。 validate method delete method
4.2.2 JavaScript中使用正则表达式
下面以一个简单示例来介绍在JavaScript中使用 正则表达式进行字符串匹配。程序要求必须输入 数字,如果输入的不是数字就弹出提示,代码如 下所示。

Struts2 数据输入校验(2) —— XML验证

Struts2 数据输入校验(2) —— XML验证

Struts2 数据输入校验(2) —— XML验证struts2提供了通过XML方式对输入数据进行验证的校验框架。

在与XXXAction同级的目录下,建立XXXAction-validation.xml,即为该Action的校验逻辑。

该校验XML的dtd格式文件为/xwork/xwork-validator-1.0.2.dtd,具体内容可以展开下面的代码:/xwork/xwork-validator-1.0.2.dtd可以看到,数据校验XML的根元素<validator>下面可以包含两种子元素:field和validator1、前者field 是针对字段进行的校验;2、后者validator 是非字段或者说全局范围的校验。

在介绍完校验是怎么回事后,后面会简单比较一下两种校验方式的区别。

一、字段校验:(field)先看个基本示例<validators><field name="username"><field-validator type="requiredstring"><message key="ername.required"/></field-validator></field><field name="password"><field-validator type="stringlength"><param name="trim">true</param><param name="minLength">4</param><param name="maxLength">10</param><message>password should be ${minLength} to ${maxLength} characters lon g.</message></field-validator></field></validators>有几个地方需要注意一下的。

struts2内置校验器使用

struts2内置校验器使用

最近在自学struts2,基本的配置了解以后又学习了struts2强大的检验功能,不仅内置的校验器非常丰富,而且也提供自定义校验。

本人做了些学习笔记,与大家分享,虽然有点水,也希望能帮到人。

首先,为什么要使用struts2的validate验证框架。

使用struts2的验证框架,能够提高客户端提交的数据的安全性。

通过验证,确保保存进数据库的信息是正确的,包括数据的格式(日期、e-mail、数字等)、判空等逻辑。

在现在javascript横行的时代,可能有人会说,我可以使用js,没必要非用后台校验的方式那样不仅增加服务器压力,而且与用户的交互也不好。

是的,js确实能完成这样的操作,但是你有没有想过,js是可以被人改掉了,可以通过很多方式来绕过客户端验证,比如模拟请求等。

(打开F12加一条js就可以取消掉校验的执行至于具体如何操作,本人还不知道),有些复杂的校验脚本语言是无法完成的呀。

所以不管服务器校验也好,客户端校验也好,我们都是需要的。

客户端验证的好处是快捷,用户体验好,减少服务器端的压力。

服务器端验证更可靠安全,可以做一些客户端验证做不到的,但是服务器端验证占用服务资源。

所以两者的使用要根据具体的场景,应该合理应用。

下面,是我本人亲手写的程序调试,重点出场啦~~在struts2中,我们可以实现对action的所有方法进行校验或者对action的指定方法进行校验。

对于输入校验struts2提供了两种实现方法:1. 基于XML配置方式实现。

2. 采用手工编写代码实现。

一、基于XML配置方式实现1、XML文件规定了参数的一些校验条件,XML命名规则:ActionName-validation.xml,其中ActionName是Action类的名字,文件放在和Action同目录下;注意:当需要对逻辑action进行校验时,如果存在一般形式的ActionName-validaton.xml文件,则也会对此逻辑Action进行校验;2.输入校验失败后,和类型转换一样,会将错误封装成fieldError,并放入Action Context中,因此在JSP中添加<s:fielderror/>可显示错误,此内容也是我们在数据校验文件中配置的;3.当输入校验失败后,和类型转换一样,返回逻辑视图为input,因此在struts.xml中必须配<result name="input"></input>;4.输入校验失败后,struts表单标签也会自动输出错误提示;XML配置文件格式:表单界面JSP:Action逻辑处理界面:Struts2的XML配置文件:从此struts配置文件可以看出,上面的表单jsp同时也是,出现错误之后返回的物理视图。

struts2注解方式的验证

struts2注解方式的验证

struts2注解⽅式的验证struts2的验证分为分编程式验证、声明式验证、注解式验证。

因现在的⼈越来越懒,都追求零配置,所以本⽂介绍下注解式验证。

⼀.hello world参考javaeye的这篇⽂章,按着做⼀次,起码有个初步印象Validation使⽤名字叫做validator的Intercepter,在默认情况下,struts2已经定义了这个Intercepter,我们在不加声明的情况下就可以使⽤Validation了如果是使⽤默认的拦截器,就已经开启了验证框架的了,直接⽤。

开启验证的⽅式是(官⽹):打开验证默认拦截器堆栈“defaultStack”已经打开验证。

在创建⾃⼰的拦截器堆栈⼀定要包括两对validation和workflow拦截器。

来⾃struts-default.xml:<interceptor-stack name="defaultStack">...<interceptor-ref name="validation"><param name="excludeMethods">input,back,cancel,browse</param></interceptor-ref><interceptor-ref name="workflow"><param name="excludeMethods">input,back,cancel,browse</param></interceptor-ref></interceptor-stack>从版本2.0.4开始,Struts为XWork的com.opensymphony.xwork2.validator.ValidationInterceptor拦截器提供了扩展。

第15章struts2校验机制

第15章struts2校验机制

输入校验一、Struts2校验机制Struts2框架提供了优秀的校验机制,它们可以分为3部分:(1)内置校验器,对web应用开发中常见的校验功能进行了封装(2)校验规则声明,允许开发人员通过XML配置文件或者Java Annoation来引用内置校验器定义输入校验规则(3)校验拦截器,框架通过拦截器validation和workflow 来实现对输入信息的校验工作。

Validation拦截器根据校验规则声明调用内置拦截器实现校验工作,并负责维护创建一个字段相关的错误信息列表,workflow负责检查此错误信息列表,如果存在错误信息,则返回Action组件相关的input结果视图,并在返回的视图中显示相关的错误信息。

此外还支持开发人员定义自己的校验器。

类型转换和输入校验是Struts2框架对客户端提交信息进行处理的两个阶段。

客户端提交的信息首先进行类型转换,不管是否在转换过程中出现异常,都将进入输入校验阶段。

只有在类型转换和输入校验没有任何错误的情况下才会进入Action组件的业务逻辑处理。

二、利用Struts2框架实现校验【例子】【Quiz.jsp】<%@page contentType="text/html"pageEncoding="UTF-8"%><%@taglib prefix="s"uri="/struts-tags"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>问卷调查</title></head><body><H1>你喜欢的笔记本品牌</H1><s:fielderror/><s:form action="basicValidate"method="post" namespace="/validate"><s:textfield name="name"label="姓名"/><br><s:textfield name="age"label="年龄"/><br><s:textfield name="answer"label="笔记本品牌"/><br><s:submit value="提交"/></s:form></body></html>【Quiz_success.jsp】<%@page contentType="text/html"pageEncoding="UTF-8"%><%@taglib prefix="s"uri="/struts-tags"%><%@page isELIgnored="false"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01Transitional//EN""/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type"content="text/html; charset=UTF-8"><title>问卷结果</title></head><body>谢谢!<b><s:property value="name"/></b>你喜欢的笔记本品牌是:<b><s:property value="answer"/></b></body></html>【QuizAction.java】package my.ognl;import com.opensymphony.xwork2.ActionSupport;public class QuizAction extends ActionSupport{ private String name;private int age;private String answer;public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAnswer() {return answer;}public void setAnswer(String answer) {this.answer = answer;}}【QuizAction-validation.xml】<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.2//EN""/dtds/xwork-validator-1.0.2.dtd" ><validators><field name="name"><field-validator type="requiredstring"><message>用户名不可为空</message></field-validator></field><field name="age"><field-validator type="int"><param name="min">6</param><param name="max">120</param><message>年龄值超出合理范围</message></field-validator></field></validators>【struts.xml】<package name="mypack2"extends="struts-default"> <action name="basicValidate"class="my.ognl.QuizAction"method="execute"><resultname="success">/WEB-INF/page/Quiz_success.jsp</result><result name="input">/Quiz.jsp</result></action></package>测试地址栏输入http://localhost:8080/example_ch1/ Quiz.jsp如果不输入姓名,年龄输入200,笔记本品牌输入IBM,得到的结果为在与Action组件同样的package路径下寻找名为**-validation.xml的校验规则声明文件,其中**代表Action 组件的名称。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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:指定字段日期值的最小值,该参数为可选参数。

相关文档
最新文档