我试图为属性编写一个通用的自定义验证器,以使其通用,我需要在闭包内引用字段名称,代码如下
在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")

    })

在我的网域类别中
class Student{
  String name

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

class Teacher{
  String firstName
  String lastName

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

我想对name和firstName使用相同的验证器,但是由于我在验证器中对fieldName进行了硬编码,因此它将始终适用于name而不是firstName,因此我想知道是否仍然可以引用到字段名称,并使验证器具有通用性,请提供帮助

最佳答案

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

从grails docs:

闭包也可以使用propertyName访问该约束所适用的字段的名称

myField validator: { val, obj -> return propertyName == "myField" }

关于grails - Grails自定义验证器,获取对字段名称的引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14121161/

10-14 15:53
查看更多