2011-11-16 66 views
3

如何指定嵌入字段为空?在下面的简单示例中,如果没有与商品相关的价格,我希望域价格可以为空。但是,如果有价格,则货币中的两个字段都是必需的。以下代码不起作用。当我尝试保存该项目时,它会抱怨货币字段的空值。Grails - 使域类中的嵌入字段可为空

class Item { 
    static constraints = { 
    price(nullable:true) 
    } 
    static embedded = ['price'] 
    Currency price 
} 

class Currency { 
    Integer quantity 
    String currencyType 
} 

回答

1

只需在您的嵌入式对象中定义一个static constraints即可。

class Currency { 
... 
    static constraints = { 
     quantity(nullable:true) 
     currencyType(nullable:true,validator:{ String val, Currency obj -> 
      if ((val && !obj.quantity) || (!val && obj.quantity)) { 
       return 'Currency.both.fields.required'; 
      } 
     }) 
    } 
} 

然后,只需添加'Currency.both.fields.required'messages.properties显示相应的错误。

+0

这不是我正在寻找的。这将允许我没有货币,但它也允许我有货币类型,没有数量或没有currencyType数量的货币。所以这不符合业务规则,我想约束条件。 – Andrew

+0

此时您可以添加自定义验证器来验证这两个字段是否已设置。我已经更新了我的回复,以说明如何做到这一点。 – schmolly159

+0

是的,这将工作。谢谢。我只是希望原始代码能够工作。看起来更漂亮。 – Andrew