【问题标题】:Grails Domain class property Set failed ValidationGrails 域类属性设置失败验证
【发布时间】:2011-10-29 22:29:33
【问题描述】:

我对 grails 中的二传手有疑问。我有两个属性 beforeTax 和 afterTax。我只想在税前的数据库中存储一个属性。在用户界面中,我希望用户在税前或税后输入。所以我把 afterTax 变成了这样的临时属性:

double getAfterTax(){
  return beforeTax * tax
}

void setAfterTax(double value){
  beforeTax = value / tax
}

当我现在输入税后值并想要保存对象时验证失败(税前值不能为空值)

我做错了什么?

【问题讨论】:

    标签: setter grails-domain-class grails-validation


    【解决方案1】:

    如果我正确理解您的问题,您想根据 afterTax 的值计算 beforeTax?

    您可以使用事件处理程序方法 beforeXXX() 来计算 beforeTax,其中 XXX 是 Validate、Insert 和 Update。那么 beforeTax 的约束可以为 nullable:false。

    def beforeValidate() {
       computeBeforeTax() 
    }
    

    【讨论】:

      【解决方案2】:

      您必须将一个属性标记为瞬态,以防止 GORM 尝试将此变量保存到数据库中。尝试将此行添加到您的域类中,其中包含afterTax

      static transients = ['afterTax']
      

      【讨论】:

      • 感谢您的回答。我没有理解地写下这个问题。我已经让它瞬态了。看到有问题(所以我将 afterTax 设为临时属性)问题是数据绑定告诉我空属性(beforeTax)无效。这是真的,所以为了解决我的问题,我将 beforeTax 设为可为空的值,现在它可以工作了。这不是我真正想要的,因为该值不应为空,但这是我目前得到的最好的值。
      • 我想我需要一段代码,它显示了你的对象的创建/保存。否则我不能再帮你了,对不起;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2013-07-10
      相关资源
      最近更新 更多