自己翻译的一篇stripes验证的官方文档(概述以及错误验证类),有错误的地方大家指出

来源:互联网 发布:店铺如何做淘宝客推广 编辑:程序博客网 时间:2024/05/16 17:16

概述

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>
在上面的描述中,你可以参照默认使用的范围和字段名称它是如何被ScopedLocalizableError找到的,在stripes中所有的验证都使用ScopedLocalizableError去建立,所以你能够使用一个在高等级正确的消息来重写你所看到需要改正的提示信息.

在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

原创粉丝点击