1

我有一个看起来像这样的 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
}

有谁知道我该怎么做?

4

1 回答 1

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.

祝你好运!

于 2012-05-18T03:04:37.990 回答