(快速参考)

验证器

目的

将自定义验证添加到字段

例子

甚至验证器: {
    返回 ( % 2) == 0
}

相当于甚至验证器小时返回小时2) == 0
}

用两个参数闭包,第二个是对象本身密码验证器好习惯的密码好用三个参数结束,第三个是错误对象密码验证器值得obj错误如果obj密码val错误rejectValue'密码', 'noMatch')
}

在消息属性中将参数传递给错误消息的示例

使用隐式参数属性名称的示例

演示  {

    那么静态的约束名称验证器: {
          如果 (!) 返回 ['缺少']
       }
}

这映射到一条消息
人员名称输入缺少请在字段中输入名称

使用隐式参数属性名称和属性值的示例
演示  {

    整数出生年份静态的约束yearOfBirth验证器: {
          如果出生年份2013) 返回 ['年太大']
       }
}

这映射到一条消息人yearOfBirth yearTooBig价值2进入0无效,因为谎言未来参数是属性类的值,例如yearOfBirth类demo Person
您会注意到,在Integers上使用这种消息时,年份显示为而不是
在下一个示例中解决

示例更加复杂
演示 宇航员 {

    整数出生年份整数YearFirstFirstSpaceTravel静态的约束yearOfFirstSpaceTravel验证器: { 整数良好的军火库如果val obj yearOfBirth返回 ['datePriorTo'val toString obj yearOfBirth toString其他 如果val obj yearOfBirth18)) {
                ['也许有点太年轻'val obj yearOfBirth各自的消息
请注意,参数是转换为String的属性值,以避免前面所述的不必要的格式化宇航员yearOfFirstSpaceTravel datePriorTo的值3进入对于第一次太空旅行的年份早于出生年份4请更正值对于yearOfBirth和yearOfFirstSpaceTravel参数将是yearOfFirstSpaceTravel类演示宇航员宇航员首次太空旅行年也许有点太年轻3岁月似乎有点年轻对于前往太空人对于yearOfBirth和yearOfFirstSpaceTravel参数将是yearOfFirstSpaceTravel类演示宇航员

描述

自定义验证器由一个最多包含三个参数的Closure实现,如果Closure接受零或一个参数,则参数值将是被验证的参数值(如果参数为零)Closure如果接受两个参数,则第一个是值第二个是正在验证的域类实例。当您的验证需要访问其他字段时,例如在检查两个输入的密码是否相同时,这很有用。如果它接受三个参数,则第一个是值,第二个是实例,第三个是是春天失误宾语

关闭可以返回

  • 空值要么真正或没有返回值指示该值有效

  • 指示无效值并使用默认消息代码

  • 指示要附加到错误代码的字符串类名propertyName用于解决错误消息的字符串如果无法解决特定于字段的消息,则将解析错误代码本身,从而允许全局错误消息

  • 包含上述字符串的列表,然后是字符串之后的任意数量的参数,这些参数在列表中用作格式化的消息参数365bet地区应用程序中的消息属性文件参数的映射如下,将参数自动映射到属性名称类名称属性值,从参数开始映射其他参数。请注意,在最终错误消息中,如果在属性中定义了该属性的标签,将使用该标签。消息属性文件,否则,使用类中定义的属性名称

当显式传递错误代码时,通常不需要使用return关键字返回错误代码,因为如果验证程序从闭包中返回,它将检查是否已将任何错误附加到错误对象上。三个参数在期望的地方关闭失误对象将直接更新