从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中,输入校验是确保数据安全和应用程序功能正确性的重要环节。本文将深入探讨Struts2中的输入校验机制,包括其重要性、实现方式以及如何在实际项目中应用。 输入校验对于任何Web应用程序都是必不可少的,...
struts2文件上传,与xml校验 struts2文件校验可通过xml配对action的名称去校验属性的值。例如UploadAction.java中有一个book的属性。那么我可以定义一个UploadAction-validation.xml去校验这个book属性的内容。 xml的...
1. **编写校验配置文件**:为每个需要校验的Action编写一个名为`actionClassName-validation.xml`的配置文件,或针对特定方法的`actionClassName-methodName-validation.xml`文件。 2. **配置文件位置**:这些配置...
开始添加LoginAction-validation.xml的校验内容,我主要是介绍struts2的校验有哪几种形式,具体的 校验格式,有多种,我就不一一介绍了,大家可以自已研究下。 把刚在LoginAction 里加的validate()去掉! 就OK了,...
本文件包"Struts2_Validation"显然是关于Struts2验证机制的详细资源,可能是包括教程、示例代码或配置文件,遗憾的是,由于我们无法直接访问压缩包内容,只能基于标题和描述进行知识讲解。 Struts2的数据验证机制是...
总之,Struts2的校验器是其强大功能的一部分,它帮助开发者轻松地管理和控制用户输入,确保数据的准确性和安全性。理解并熟练使用Struts2的验证机制对于开发高质量的Web应用至关重要。通过阅读给出的博客文章,你将...
Struts2的输入校验配置主要通过XML文件进行,这个文件通常命名为`<Action-name>-validation.xml`,并放置在与Action类相同的包内。例如,一个名为`RegistAction`的Action对应的校验文件可能是`RegistAction-...
- **Validation**:标记一个类需要被校验,通常配合Struts的配置文件使用。 ### 验证器类型详解 1. **ConversionErrorFieldValidator**:用于检测字段转换时是否出现错误,例如将字符串转换为日期时的异常情况。 2...
在Struts2中,Validation框架是用于处理数据验证的重要组件,它允许开发者在用户输入提交到服务器之前或之后进行验证,确保数据的准确性和完整性。下面将详细解释Struts2中的Validation框架及其在前后台验证中的应用...
- 校验配置文件通常以`action类名-validation.xml`命名,如果需要针对特定方法进行校验,可以命名为`action类名-name属性名-validation.xml`。 2. **配置文件位置**: - 配置文件应放置在与Action类相同的包路径下...
Struts2是一个非常流行的Java ...你可以通过解压文件,学习和理解Struts2数据校验的详细步骤和实践方法。这个压缩包对于学习和掌握Struts2数据校验机制非常有帮助,特别是对于那些希望提升Java Web开发技能的人来说。
- **XML配置文件**:Struts2支持基于XML的校验配置文件,分为局部校验配置文件和全局校验配置文件。局部校验文件针对单个Action类,而全局校验文件适用于整个应用。配置文件内容包括字段校验(field validation)和...
Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用程序。在Struts2中,数据校验是确保输入数据正确性和完整性的关键环节,它可以帮助开发者预防潜在的数据错误,提高应用的健壮性。...
本文将深入探讨Struts2中的输入校验机制,以及如何对指定方法进行输入校验。 在Struts2中,输入校验通常分为两种方式:客户端校验和服务器端校验。客户端校验主要通过JavaScript在用户端进行,可以提供即时反馈,但...
首先,我们来探讨"Struts2中的validation_多国语言版",这是Struts2的数据校验功能。Struts2提供了一种灵活的机制来验证用户输入,通过在Action类中定义校验规则或使用XML配置文件。当用户提交表单时,框架会自动...
Struts2提供了多种数据校验方式,包括基于注解的校验、基于XML配置的校验和自定义校验。 1. **基于注解的校验**: Struts2集成Spring的Validation框架,允许开发者在Action类的属性上使用JSR303/JSR349(Bean ...
在Struts2中,类型转换和数据校验是两个关键的特性,它们确保了用户输入的数据能够准确无误地被处理和验证,从而提高了应用的安全性和可靠性。 **类型转换(Type Conversion)** 在Struts2中,类型转换是自动进行...
Struts2 Validation是Apache Struts框架的一个重要组成部分,主要用于处理Web应用中的数据验证。这个框架提供了灵活且...对于使用Struts2框架的开发者来说,理解和熟练掌握Struts2 Validation是提升开发效率的关键。
5. **struts2-convention-plugin.jar**:该插件实现了“约定优于配置”的原则,可以自动根据类名和方法名生成Action配置,简化了开发过程。 6. **struts2-dojo-plugin.jar** 和其他UI插件:这些插件提供了与特定...