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页面。
- 大小: 55.8 KB
分享到:
相关推荐
包含hibernate-valdator等用于数据校验所需要的基本jar包。
bootstrapvalidator,包含所有需要的资源,demo,api
SpringMVC JSR 数据校验完整jar包下载,一共六个jar包,classmate-1.0.0.jar,hibernate-validator-5.0.0.final.jar,hibernate-validator-annotation-processor-5.0.1.final.jar,hibernate-validator-cdi-5.0.0....
主要介绍了springmvc的数据校验的实现示例代码, 具有一定的参考价值,感兴趣的小伙伴们可以参考一下
JSR303 hibernate-validator-5.1.0.zip 进行数据格式;数据校验
Vue-validator 是Vue的表单验证...基本使用 <validator name=validation> <form novalidate> <label for=username>username: <input type=text id=username v-validate:username=['required'] />
使用bootstrap-datepicker和bootstrapValidator也有一段时间了,在工作中发现两者同时使用时会出现的一种问题,当选择完日期后,并不会正确校验该字段。为了更加直观的展现问题,上图一张。 可以看出,当选择完日期...
python-validator 是一个类似于 Django ORM 的数据校验库,适用与任何需要进行数据校验的应用,比较常见的是 Web 后端校验前端的输入数据。 特性 支持 python2 和 python3。 使用类描述数据结构,数据字段一目了然。...
数据校验, hibernate-validator-6.0.8.Final-dist.zip
利用 POI统一对Execel表格文件的导入与校验,统一封装,以后勿需自己写逻辑代码,所有的都是可配置的。
这是数据校验的jar包,使用了hibernate框架的部分功能,上传上来以方便博客里面进行引用...需要用的朋友也可以下载使用
整合hibernate.validator校验器对controller接口参数进行校验 使用了springmvc统一异常处理 使用了FormattingConversionServiceFactoryBean对于传入参数中日期或数字字符串进行数据转换和数据格式化 使用了...
hibernate_validator_reference_5.1.3 整合spring进行参数校验
前端开发中,表单的校验一个很常见的功能,一些 ui 库例如ant.design 与Element ui 都实现了有校验功能的 Form 组件...async-validator 的功能是校验数据是否合法,并且根据校验规则给出提示信息。 下面演示一下 async
hibernate validator 是JRS 303的一个参考实现,可以帮助我们完成数据的校验和格式化.Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint
FLEX快速入门.zip ...一个使用Flexvalidator的优点是在客户端执行,这使你在向服务器传输之前校验数据。通过使用Flex validators,你不需要传输数据,然后从服务器端接受错误信息,也全面提高的应用程序的响应度。
背景参数校验是我们程序开发中必不可少的过程。用户在前端要校验参数的合法性,当数据到了后端,为了防止恶意操作,保持程序的健壮性,后端同样需要对数据进行校验。当我们
在springMVC数据校验时的 springMVC数据校验所需校验包, hibernate-validator.jar,jboss-logging.jar,validation-api.jar.
使用 @Valid 注释 。 对成员变量设置约束的域类。 低于年份值必须等于或大于 2015 下面是一个例子: @XmlRootElement(name = "customer") public class Customer { @XmlElement @Min(2015) private int year; …..}...
Hibernate Validator 5是Bean Validator(JSR-303)规范的标准实现,此版本包含了许多新特性: •约束组合:自定义的约束,可避免重复代码,提高可读性 •对组的约束:允许你自定义约束,你希望看到的特定子集 •类型...