Validation Grails验证无约束块
Grails中约束验证域对象的常用方法是在域对象中定义静态约束闭包,之后可以调用myObject.validate() 是否可以以某种方式将应该验证的内容传递给validate调用,而不定义约束块Validation Grails验证无约束块,validation,grails,Validation,Grails,Grails中约束验证域对象的常用方法是在域对象中定义静态约束闭包,之后可以调用myObject.validate() 是否可以以某种方式将应该验证的内容传递给validate调用,而不定义约束块 我想这可以通过Spring验证器实例来实现,但是有没有一种更简单的方法可以让您仍然拥有来自Grails的“好东西”(max、email等)?我想象这样一种方法:创建一个带有静态约束的@validatablegroovy类,其中包含您需要的任何Grails好东西。让它像您的域一样拥有所有字段(例如,通过
我想这可以通过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约束应用于域?那么我不理解你的问题,我的问题是:“没有约束块”-即使在主题中也是如此。您建议我使用约束块。。所以图:)我的答案回答了你的问题,因为如果你想使用内置验证,你需要一个约束块。很好的论证。时期