【问题标题】:Grails: Custom validator based on a previous value of the fieldGrails:基于字段先前值的自定义验证器
【发布时间】:2011-02-15 15:53:15
【问题描述】:

我正在尝试为我的域类中的变量“数量”创建一个自定义验证器,以便新值应该比以前的值大 0.50。

例如,假设之前的值为 1.0,下次该值应至少为:[之前的值 + 0.50] 或更多。

提前感谢您的帮助

【问题讨论】:

    标签: grails custom-validators


    【解决方案1】:

    您可以尝试阅读domainEntity.getPersistentValue('amount')。

    编辑: ...在自定义验证器中,例如:

    class Bid { 
      Double amount 
      ...
      static constraints = { amount(validator: { double a, Bid b -> 
        def oldValue = b.getPersistentValue('amount')
        a > oldValue + 0.5 ? true : "Amount $a should be at least ${oldValue  + 0.5}" }) 
      }
    }
    

    【讨论】:

    • 我可以将它添加到域类中的金额约束中吗?
    • 我相信是的,它是一个有效的 Grails 代码,并且您在验证器中确实有一个实体实例。
    • code class Bid { double amount Date dateTimeOfBid Customer bidder static belongsTo = [listing:Listing] static constraints = { amount(validator: {Bid.getPersistentValue('amount')}) dateTimeOfBid(nullable :false) 投标人(nullable:false) } }
    • 由于某种原因降价对我不起作用。我仍然对这个圣杯感到困惑和陌生。你能看一下并提出任何建议吗?
    【解决方案2】:

    感谢 Victor Sergienko,但我对您的代码做了一些修改

    class Bid { 
      Double amount 
      ...
      static constraints = { amount(validator: { double a, Bid b -> 
        Bid tempBid = Bid.get(b.id)
        def oldValue = tempBid.getPersistentValue('amount')
        a > oldValue + 0.5 ? true : "Amount $a should be at least ${oldValue  + 0.5}" }) 
      }
    }
    

    区别就在这一行:

    Bid tempBid = Bid.get(b.id)
    def oldValue = tempBid.getPersistentValue('amount')
    

    我不知道为什么b.getPersistentValue('amount') 总是返回空值,我的 grails 版本是 2.4.3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多