概述
在Stripes中,验证包括三个方面的概念
1.annotation验证
2.类型转换
3.自定义验证
Annotation正如名字所说,在ActionBean中通过Annotation来制定验证规则的一种方法,这些验证被应用到ActionBean中的单独字段上,可以将一些经常使用的验证进行封装.
类型转换是将一个HttpServletRequest请求表单中的输入字段由字符串转为Java对象(任何对象,包括字符串),类型转换是验证处理的核心,它能够容易的扩展到新版本或自定义类型.
自定义验证是执行验证的,它通过在ActionBean中的一个或多个的JAVA代码函数来执行验证,一个ActionBean能根据不同的情况定义零个、一个或多个方法进行验证.
验证处理过程
字段有很多不同种类的验证,有人可能会问它们是如何被应用的,什么情况下会促发会发生什么错误,以下是一个一般的处理过程.
1.必填字段最先执行.
2.在必填字段验证之后,没有错误
a.进行最大长度、最小长度以及mask验证
b.如果这个字段仍然没有错误,转换到目标类型,然后绑定到ActionBean的属性上.
c.如果转换的过程仍然没有错误,运行仍和最大值/最小值的检验(数字)
3.以上验证没有错误,进行基于验证的计算表达式
4.如果仍然没有错误,运行自定义验证(除非覆盖了运行的错误)
这种方式的设计是在一个传值中来捕获尽可能多的错误信息,因此当用户忘了去输入一个值或者输入了仍和一个错误类型,它们将能够呈现出两个错误在第一次提交表单的时候,但是它不能呈现出任何所需字段的额外错误信息(如违反了最小长度)【but they will not be presented with any additional (e.g. minimum length violation) errors for the field that was required but not supplied】,应该注意当其他的验证成功后才开始运行自定义验证,它能够依赖ActionBean进行一个很好的定义,不管怎么,它都是可配置的(看Configuration Reference).
正如我们所看到的章节[选择性的屏蔽验证]和[改变验证结果],虽然这不是真个书,但是足以解决我们现在的情况.
错误验证类
在开始下一步之前,我们依次进行一个不同验证的快速导览,在下一章节,我们将会看见很多错误验证有关的信息,所以我们有必要了解不用的错误验证类型以及如何使用它们.
ValidationError是错误验证类型方法的接口,所有的错误验证类型都必须支持它,它可以使你有不同的错误验证类提供不同的功能,如果你不满意stripes提供的错误验证类你能够更容易的写出自己的错误验证类.
SimpleError使一个简单的ValidationError的实现,它容许一个硬编码的消息被使用,它能够在消息中加入字段名和值.
LocalizableError继承与SimpleError并能够在一个扩展的资源包中寻找错误信息,这个包名可以配置-如何去做请看Configuration Reference.看两部分,一部分是key的前缀--被使用的ActionBean的路径,另外一部分是扩展可供的key.
ScopedLocalizableError继承LocalizableError,提供了选择搜索错误消息的范围,在实际中这相当于按照名字到资源包中去查找:
- <actionPath>.<fieldName>.<errorName>
- <actionPath>.<fieldName>.errorMessage
- <fieldName>.<errorName>
- <fieldName>.errorMessage
- <actionPath>.<errorName>
- <defaultScope>.<errorName>
在Stripes里所有的错误消息都使用java.text.MessageFormat,它能将你提供的参数融合进消息,前两个参数总是(分别是0和1)分别指向字段名和字段值,以下是一个示例,并且你可以查看错误类文档,它对MessageFormat有更消息的信息.
这是个错误消息示例
myCustomError={0} must be formatted mm/dd/yy. {1} is not a valid date.
自己翻译的,原文:
http://www.stripesframework.org/display/stripes/Validation+Reference#ValidationReference-Overview