在 Grails 中约束验证域对象的常用方法是在域对象中定义一个静态约束闭包,之后可以调用 myObject.validate()。
是否有可能以某种方式将应该验证的内容传递给 validate 调用而不定义约束块?
我想这可以用 Spring 验证器实例来完成,但有没有更简单的方法让你仍然拥有 Grails 的“好东西”(最大、电子邮件等)?
在 Grails 中约束验证域对象的常用方法是在域对象中定义一个静态约束闭包,之后可以调用 myObject.validate()。
是否有可能以某种方式将应该验证的内容传递给 validate 调用而不定义约束块?
我想这可以用 Spring 验证器实例来完成,但有没有更简单的方法让你仍然拥有 Grails 的“好东西”(最大、电子邮件等)?
您可以将字段列表传递到.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()
我想象这样一种方法:创建一个@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()