Validation Grails验证无约束块

Validation Grails验证无约束块,validation,grails,Validation,Grails,Grails中约束验证域对象的常用方法是在域对象中定义静态约束闭包,之后可以调用myObject.validate() 是否可以以某种方式将应该验证的内容传递给validate调用,而不定义约束块 我想这可以通过Spring验证器实例来实现,但是有没有一种更简单的方法可以让您仍然拥有来自Grails的“好东西”(max、email等)?我想象这样一种方法:创建一个带有静态约束的@validatablegroovy类,其中包含您需要的任何Grails好东西。让它像您的域一样拥有所有字段(例如,通过

Grails中约束验证域对象的常用方法是在域对象中定义静态约束闭包,之后可以调用myObject.validate()

是否可以以某种方式将应该验证的内容传递给validate调用,而不定义约束块


我想这可以通过Spring验证器实例来实现,但是有没有一种更简单的方法可以让您仍然拥有来自Grails的“好东西”(max、email等)?

我想象这样一种方法:创建一个带有静态约束的
@validatable
groovy类,其中包含您需要的任何Grails好东西。让它像您的域一样拥有所有字段(例如,通过扩展域),并提供一种方法将所有字段从域实例复制到该对象的新实例,例如使用构造函数。然后对该类调用
validate()

class MyDomain {
    String email
    MyDomain() {}
    MyDomain(email) {
        email = this.email
    }
}
@Validateable
class MyDomainCustomValidator extends MyDomain {
    MyDomainValidator() {}
    MyDomainValidator(domain) {
        super(domain.email)
    }
    static constraints = {
        email email: true
    }
}

def d = new MyDomain('e@mail.com')
new MyDomainCustomValidator(d).validate()

您可以将字段列表传递到
.validate([“fieldA”,“fieldB”])
中,它将只验证这些字段。您仍然需要一个约束块来定义这些字段的约束

从Grails用户指南: validate方法接受一个可选的列表参数,该参数包含要验证的属性的名称。当指定名称列表时,将只验证这些属性

回复@eugene82:

@Validateable
class MyDomainValidator {
String email
static constraints = {
email(email:true)
}
}

MyDomain m = new MyDomain()...
MyDomainValidator mv = new MyDomainValidator()..
mv.properties = m.properties
mv.validate()

好。。这不完全是我要找的。我更希望能够执行类似于d.validate(thisConstraint)的操作。“我不知道这是否可能……”詹姆斯,为什么?有没有其他方法可以将定义在域之外的Grails约束应用于域?那么我不理解你的问题,我的问题是:“没有约束块”-即使在主题中也是如此。您建议我使用约束块。。所以图:)我的答案回答了你的问题,因为如果你想使用内置验证,你需要一个约束块。很好的论证。时期