我如何外部化Grails中的自定义约束? [英] How can I externalize a custom constraint in Grails?

查看:114
本文介绍了我如何外部化Grails中的自定义约束?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想让我的自定义约束验证器闭包在我的属性的约束定义之外,因为它使得它更易于阅读和重用,但是我做错了什么。我试图做到这一点:

  class City {
字符串名称

static (City.findByNameILike(it))= {
name(可为空,假,空白:假,验证器:uniqueCityValidator)
}

def uniqueCityValidator = {
if )return ['cityExists']
}
}

但是我出现以下错误:

  groovy.lang.MissingPropertyException:No such property:uniqueCityValidator for class:com.xxx.City 
at com.withfriends.City $ __ clinit__closure2.doCall(City.groovy:7)
at com.withfriends.City $ __ clinit__closure2.doCall(City.groovy)
at grails.test.MockUtils.addValidateMethod (MockUtils.groovy:857)
在grails.test.MockUtils.prepareForConstraintsTests(MockUtils.groovy:544)
在grails.test.MockUtils $ prepareForConstraintsTests.call(未知源代码)
在grails .test.GrailsUnitTestCase.mockForConstraintsTests(GrailsUnitTestCase.groov y:116)
at com.xxx.CityTests.testUniqueConstraintForSameCase(CityTests.groovy:9)


  static uniqueCityValidator = {$ b $如果(City.findByNameILike(it))返回['cityExists'] 
}

我们有类似的东西。在我们的项目中,我们在自己的类中有自定义约束。所以我们可以在每个领域类中使用它们。代码如下所示:

  class Validation {
static uniqueCityValidator = {
if(City.findByNameILike它))return ['cityExists']
}
}

在域类:

 静态约束= {
名称(可为空,false,空:false,验证器:Validation.uniqueCityValidator )
}


I'd like to keep my custom constraint validator closures outside of the constraints definition for my attribute because it makes it easier to read and reuse, but I'm doing something wrong. I'm trying to do this:

class City {
    String name

    static constraints = {
        name( nullable:false, blank:false, validator: uniqueCityValidator )
    }

    def uniqueCityValidator = {
        if ( City.findByNameILike(it) ) return ['cityExists']
    }
}

But I'm getting the following error:

groovy.lang.MissingPropertyException: No such property: uniqueCityValidator for class: com.xxx.City
at com.withfriends.City$__clinit__closure2.doCall(City.groovy:7)
at com.withfriends.City$__clinit__closure2.doCall(City.groovy)
at grails.test.MockUtils.addValidateMethod(MockUtils.groovy:857)
at grails.test.MockUtils.prepareForConstraintsTests(MockUtils.groovy:544)
at grails.test.MockUtils$prepareForConstraintsTests.call(Unknown Source)
at grails.test.GrailsUnitTestCase.mockForConstraintsTests(GrailsUnitTestCase.groovy:116)
at com.xxx.CityTests.testUniqueConstraintForSameCase(CityTests.groovy:9)

解决方案

The closure has to be static:

static uniqueCityValidator = {
    if ( City.findByNameILike(it) ) return ['cityExists']
}

We have something similar. In our project we have the custom constraints in an own class. So we can use them in every domain class. The code looks like:

class Validation {
    static uniqueCityValidator = {
        if ( City.findByNameILike(it) ) return ['cityExists']
    }
}

In the domain class:

static constraints = {
    name( nullable:false, blank:false, validator: Validation.uniqueCityValidator )
}

这篇关于我如何外部化Grails中的自定义约束?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆