-1

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

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

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

4

2 回答 2

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()
于 2013-03-14T20:42:31.983 回答
-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()
于 2013-03-14T15:06:41.113 回答