2011-11-16 36 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

相關問題