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