在Grails域对象中,是否可以基于另一个字段验证字段?

时间:2012-05-17 22:50:12

标签: validation grails groovy gorm

我有一个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
}

有谁知道我该怎么做?

1 个答案:

答案 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

之类的内容 祝你好运!