Grails自定义验证器,获取对字段名称的引用

vij*_*agi 2 grails shared global customvalidator

我正在尝试为属性编写一个通用的自定义验证器,使其通用我需要在闭包内对字段名称的引用,代码如下在config.groovy

grails.gorm.default.constraints = {
nameShared(validator: {val, obj, errors->
        Pattern p = Pattern.compile("[a-zA-Z0-9-]{1,15}")
        Matcher m = p.matcher(val)
        boolean b = m.matches()
        if(!b)
        errors.rejectValue('name', "${obj.class}.name.invalid", "Name is invalid")

    })
Run Code Online (Sandbox Code Playgroud)

在我的域类中

class Student{
  String name

  static constraints = {
       name(shared:'nameShared')
   }
}

class Teacher{
  String firstName
  String lastName

  static constraints = {
     firstName(shared:'nameShared')
  }
}
Run Code Online (Sandbox Code Playgroud)

我想对name和firstName使用相同的验证器,但由于我在验证器中对fieldName进行硬编码,它将始终用于name而不是firstName,所以我想知道是否有任何方式我可以获得对fieldname并使验证器通用,请帮助

aio*_*los 6

您可以使用该变量propertyName来获取已验证属性的名称.

从grails docs:

Closure还可以访问约束适用于使用的字段的名称 propertyName

myField validator: { val, obj -> return propertyName == "myField" }
Run Code Online (Sandbox Code Playgroud)