从Struts2 校验框架在验证的场所上可以分为:客户端校验和服务端校验。
客户端校验是指,在HTML画面上自动生成JavaScript校验代码,在用户提交到服务器之前在客户端浏览器中进行校验。默认位客户端校验。
服务端校验是指,在数据提交到服务器上之后,在Action处理之前,对客户但提交的数据进行校验。
从Struts2校验框架的配置上可以分为:Java Annotation配置和XML配置文件配置
Java Annotation配置是指,使用Java Annotation语法,在Java源代码上标记需要校验的内容,和校验的方式。
XML配置文件配置是指,使用XML配置文件配置需要校验的内容和校验方式。
5.2节:Validator与Validation
Validation指校验,Validator指谁来校验。
在Struts2框架中Validator必须在系统中注册,如果没有注册,系统使用默认的注册,这些validator注册文件在xwork的jar文件中,内容如下:
<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="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"/>
</validators>
自己需要注册自己的Validator时,可以使用上述相似的内容,这个文件需要放在WEB-INF/classes目录下,文件的名字叫validators.xml。
一旦自己定义了validators.xml文件,系统就不会在加载默认的Validators文件,所以在Validators.xml中需要拷贝默认的内容。
5.3节:Validation与Intercepter
Validation使用名字叫做validator的Intercepter,在默认情况下,struts2已经定义了这个Intercepter,我们在不加声明的情况下就可以使用Validation了。
5.4节:使用Java Annotation配置校验
import com.opensymphony.xwork2.validator.annotations包提供了一些必要的Annotation用来配置校验信息。
这些内容包括:
枚举类型
ValidatorType
Field 校验字段
Simple 校验其他
Annotation(标注)类型
Validation
用来标记一个类需要被校验
ConversionErrorFieldValidator
字段转换出错
DateRangeFieldValidator
日期范围校验
DoubleRangeFieldValidator
Double类型范围校验
EmailValidator
Email地址校验
ExpressionValidator
使用一个OGNL表达式的校验,功能非常强大
FieldExpressionValidator
针对一个字段的使用OGNL表达式的校验
IntRangeFieldValidator
Int类型范围校验
RegexFieldValidator
正则表达式校验
RequiredFieldValidator
必填字段校验
RequiredStringValidator
必填String校验,
StringLengthFieldValidator
字符串长度校验
UrlValidator
URL校验
Validations
可以组合上述的各种校验类型以满足更多的需求。
VisitorFieldValidator
可以将Action中的对象的属性的校验方法定位到已经定义的对象原有的校验方法
CustomValidator
ValidationParameter
两个类一起完成自定义的校验
示例:
package com.jpleasure;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.FieldExpressionValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
import com.opensymphony.xwork2.validator.annotations.StringLengthFieldValidator;
import com.opensymphony.xwork2.validator.annotations.Validation;
import com.opensymphony.xwork2.validator.annotations.ValidatorType;
@Validation()
public class RegisterAction extends ActionSupport {
private String name;
private String password;
private String rePassword;
private String mail;
private String description;
public String getName() {
return name;
}
@RequiredFieldValidator(type = ValidatorType.FIELD,
shortCircuit = true, message = "name is required")
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
@RequiredFieldValidator(type = ValidatorType.FIELD,
shortCircuit = true, message = "password is required")
@StringLengthFieldValidator(type = ValidatorType.FIELD,
shortCircuit = true, message = "password must has proper legnth",
minLength = "5", maxLength = "12")
public void setPassword(String password) {
this.password = password;
}
public String getRePassword() {
return rePassword;
}
@RequiredFieldValidator(type = ValidatorType.FIELD,
shortCircuit = true,
message = "input password again please!")
@StringLengthFieldValidator(type = ValidatorType.FIELD,
shortCircuit = true, message = "password must has proper legnth",
minLength = "5", maxLength = "12")
@FieldExpressionValidator(expression = "password eq rePassword",
message = "two password must match")
public void setRePassword(String rePassword) {
this.rePassword = rePassword;
}
public String getMail() {
return mail;
}
@RequiredFieldValidator(type = ValidatorType.FIELD,
shortCircuit = true, message = "mail is required")
public void setMail(String mail) {
this.mail = mail;
}
public String getDescription() {
return description;
}
@RequiredFieldValidator(type = ValidatorType.FIELD,
shortCircuit = true, message = "description is required")
public void setDescription(String description) {
this.description = description;
}
public String execute() throws Exception {
return SUCCESS;
}
}
5.5节:使用XML配置Validation
Xml配置文件与Action的关系为:
SomeAction.java – SomeAction-validation.xml
且与SomeAction.class处在相同的目录中。
SimpleAction-validation.xml文件示例:
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="bar">
<field-validator type="required">
<message>You must enter a value for bar.</message>
</field-validator>
<field-validator type="int">
<param name="min">6</param>
<param name="max">10</param>
<message>
bar must be between ${min} and ${max}, current value is ${bar}.
</message>
</field-validator>
</field>
<field name="bar2">
<field-validator type="regex">
<param name="regex">[0-9],[0-9]</param>
<message>
The value of bar2 must be in the format "x, y", where x and y are between 0 and 9
</message>
</field-validator>
</field>
<field name="date">
<field-validator type="date">
<param name="min">12/22/2002</param>
<param name="max">12/25/2002</param>
<message>The date must be between 12-22-2002 and 12-25-2002.</message>
</field-validator>
</field>
<field name="foo">
<field-validator type="int">
<param name="min">0</param>
<param name="max">100</param>
<message key="foo.range">Could not find foo.range!</message>
</field-validator>
</field>
<validator type="expression">
<param name="expression">foo lt bar </param>
<message>Foo must be greater than Bar. Foo = ${foo}, Bar = ${bar}.</message>
</validator>
</validators>
我们看看上面的配置文件,首先每一个validatior都必须有一个type属性,type属性的值为我们前面定义的validator的name。
Message提供了校验出错的信息,message有一个属性key,通过可以可以找到i18n文件定义的内容,但是key并不是必须的。Message体内部的消息为默认消息,当i18n文件中不存在时表示该消息。消息中可以使用${}来引用被校验的对象例如:${foo},${bar}
5.6节:Validator和Field Validator
Field Validator用来校验一个字段,例如:
<field name="email_address">
<field-validator type="required">
<message>You cannot leave the email address field empty.</message>
</field-validator>
<field-validator type="email">
<message>The email address you entered is not valid.</message>
</field-validator>
</field>
Filed validator可以从filed集成字段名字,这样可以将摸个Field的所有的校验局限在一定的范围内。
使用Validator可以校验多个字段之间的关系,例如:
<validator type="expression>
<param name="expression">foo gt bar</param>
<message>foo must be great than bar.</message>
</validator>
Validator也可以校验一个字段,例如:
<validator type="required">
<param name="fieldName">bar</param>
<message>You must enter a value for bar.</message>
</validator>
但是为了将一个字段的所有校验放在一起,我们倾向于尽量使用field validator
5.7节:短路(Short-Circuiting)
参看如下例子:
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!-- Field Validators for email field -->
<field name="email">
<field-validator type="required" short-circuit="true">
<message>You must enter a value for email.</message>
</field-validator>
<field-validator type="email" short-circuit="true">
<message>Not a valid e-mail.</message>
</field-validator>
</field>
<!-- Field Validators for email2 field -->
<field name="email2">
<field-validator type="required">
<message>You must enter a value for email2.</message>
</field-validator>
<field-validator type="email">
<message>Not a valid e-mail2.</message>
</field-validator>
</field>
<!-- Plain Validator 1 -->
<validator type="expression">
<param name="expression">email.equals(email2)</param>
<message>Email not the same as email2</message>
</validator>
<!-- Plain Validator 2 -->
<validator type="expression" short-circuit="true">
<param name="expression">email.startsWith('mark')</param>
<message>Email does not start with mark</message>
</validator>
</validators>
校验的顺序:首先Validator,其次Field Validator,但是在Validator或者Field Validator执行的过程中,顺序按照xml文件中的定义。短路的意思是,一旦一个短路的校验出错,其余后续的校验将不再进行。例如上述的顺序是:
1)Plain Validator 1
2)Plain Validator 2
3)Field Validators for email field
4)Field Validators for email2 field
由于Validator 2是短路的,一旦Validator 2校验出错,则email和email2都不会进入校验过程。
5.8节:validate方法
ActionSupport实现了Validatable接口,这个接口中定义了一个validate方法,通过重写validate方法可以完成更详细的校验,例如:
public void validate() {
User user = getUser();
if (StringUtils.isBlank(user.getName())) {
addActionError(getText("user.name.empty"));
}
if (StringUtils.isBlank(user.getAddress())) {
addActionError(getText("user.address.empty"));
}
}
ActionSupport同时也实现了ValidationAware接口,该接口提供了addActionError等输出错误消息的方法。
分享到:
相关推荐
综上所述,Struts2的输入校验机制不仅支持基本的手动校验,还提供了高度可配置和扩展的验证框架,使得开发者能够根据应用的具体需求,灵活地实现各种校验逻辑,从而提升应用程序的质量和用户体验。
2、用户名只能使用数字或者字母,长度为6~20之间; 3、密码、确认密码必须是数字和字母,长度为6~20之间; 4、密码、确认密码必须相同; 5、收入必须在0.001~10000.000之间; 6、年龄必须是整数且必须在0~120...
Struts2作为一款流行的Java Web开发框架,提供了一套强大的校验框架,使得开发者能够方便地对用户输入数据进行验证,确保数据的准确性和安全性。本文将深入探讨Struts2校验框架的应用,包括其核心概念、配置方式、...
Struts2的校验框架是基于Apache Commons Validator库的,它允许开发者定义一系列的验证规则来检查用户的输入。这些规则可以是简单的数据类型检查,如非空、长度限制,也可以是复杂的业务逻辑校验。校验过程通常分为...
Struts2提供了内置的验证框架,允许开发者自定义校验规则,以满足特定业务需求。下面将详细介绍Struts2自定义校验框架的相关知识点。 1. **Struts2验证框架概述** Struts2的验证框架主要负责处理用户提交的数据,...
### Struts2校验框架使用心得 #### 一、Struts2校验框架概述 Struts2是一款基于Java的企业级Web应用开发框架,它能够帮助开发者构建出结构清晰、易于维护的应用程序。其中,Struts2提供的校验框架是其核心特性之一...
1. **Struts2的校验框架**: Struts2提供了内置的验证框架,基于XML配置或者注解实现。这个框架允许开发者定义一组规则来检查用户提交的数据,这些规则可以在Action类中应用。 2. **XML输入校验**: - **创建校验...
Struts2是一个强大的Java Web应用程序开发框架,它在MVC(模型-视图-控制器)设计模式的基础上提供了许多优秀特性,其中包括一个强大的校验框架。这个框架使得开发者能够有效地验证用户输入,确保数据的准确性和安全...
5. **拦截器**:拦截器是Struts2的一大特色,它允许开发者在Action调用前后插入自定义逻辑,比如日志记录、权限验证、数据校验等。在day01的课程中,你可能会学习如何定义和使用拦截器,以及如何在配置文件中配置...
struts2.0的数据校验框架struts2.0的数据校验框架struts2.0的数据校验框架struts2.0的数据校验框架
### Struts2校验框架详解 #### 一、概述 Struts2作为一款流行的Java Web应用框架,提供了丰富的功能来支持开发人员构建高效且可维护的应用程序。其中,Struts2校验框架(Validation Framework)是该框架的核心特性...
在Struts框架中,数据校验有两种主要方式:一是基于ActionForm的校验,通过在Form Bean中添加验证逻辑;二是使用Struts的Validator框架,它提供了一种更灵活的校验规则定义方式,可以在配置文件中定义校验规则,然后...
Struts2提供了多种方式进行输入校验,包括Action级别校验、拦截器级别校验以及基于Validator框架的校验。 二、Action级别校验 Action级别校验是在Action类中定义校验逻辑,通常通过在Action类的属性上添加注解实现...
**Struts2的校验框架** Struts2提供了强大的验证框架,支持多种验证方式,包括基于注解的验证、XML配置的验证以及编程式验证。这些验证规则可以定义在Action类中,或者单独的验证配置文件里。 1. **基于注解的验证*...
Struts2应用开发系列Struts2的校验框架
Struts2作为一款流行的Java Web框架,其在处理用户输入数据和实现多语言支持方面具有强大的功能。在“Struts2数据校验与国际化”这一主题中,我们将深入探讨Struts2如何通过不同的验证机制确保数据的有效性,以及...
例如,当用户提交登录表单时,Struts2会调用LoginAction的execute方法,该方法负责校验用户输入并根据验证结果返回不同的结果视图,如登录成功跳转到主页面,失败则返回错误提示页面。 管理员和普通用户的区分可能...