我有一个Grails域对象,如下所示:
class Product {
Boolean isDiscounted = false
Integer discountPercent = 0
static constraints = {
isDiscounted(nullable: false)
discountPercent(range:0..99)
}
我想向discountPercent
添加验证器,该验证器仅验证isDiscounted
是否为真,如下所示:
validator: { val, thisProduct ->
if (thisProduct.isDiscounted) {
// need to run the default validator here
thisProduct.discountPercent.validate() // not actual working code
} else {
thisProduct.discountPercent = null // reset discount percent
}
有谁知道我该怎么做?
答案 0 :(得分:1)
这或多或少是您所需要的(在discountPercent字段上):
validator: { val, thisProduct ->
if (thisProduct.isDiscounted)
if (val < 0) {
return 'range.toosmall' //default code for this range constraint error
}
if (99 < val) {
return 'range.toobig' //default code for this range constraint error
} else {
return 'invalid.dependency'
}
你不能都有一个特殊的验证器依赖别的东西和有一个特殊的验证器,因为你不能在一个字段上运行一个验证器(我知道),只有在单一属性上。但是如果你在这个属性上运行验证,你将依赖自己并进行无休止的递归。因此我手动添加了范围检查。在您的i18n文件中,您可以设置full.packet.path.FullClassName.invalid.dependency=Product not discounted
。