Grails验证没有Constraints块

时间:2013-03-14 14:26:27

标签: validation grails

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

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

我想可以使用Spring验证器实例来完成,但是有一种更简单的方法可以让你仍然拥有Grails的“好东西”(最大,电子邮件等)吗?

2 个答案:

答案 0 :(得分:0)

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

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

回复@ 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()

答案 1 :(得分:-1)

我想象这样一种方法:创建一个带有静态约束的@Validateable 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()