1

次のようなGrailsドメインオブジェクトがあります。

class Product {
    Boolean isDiscounted = false
    Integer discountPercent = 0

    static constraints = {
        isDiscounted(nullable: false)
        discountPercent(range:0..99)
}

これにバリデーターを追加したいのですが、これはtrueの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 に答える