2011-10-29 35 views
0

我在grails中有一個setter問題。我有兩個屬性beforeTax和afterTax。我只想在db beforeTax中存儲一個屬性。在用戶界面中,我希望用戶在稅前或稅後輸入。所以,我提出了稅後瞬態特性是這樣的:Grails域類屬性設置失敗驗證

double getAfterTax(){ 
    return beforeTax * tax 
} 

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

當我現在稅值後進入並要保存驗證失敗的對象(稅前不能爲空值)

什麼我做錯了嗎?

回答

0

您必須將一個屬性標記爲瞬態,以防止GORM嘗試將此變量保存到數據庫中。嘗試將此行添加到您的域類中,該類包含afterTax

static transients = ['afterTax'] 
+0

感謝您的回答。我沒有把這個問題寫得可以理解。我已經讓它瞬變了。看到問題(所以我做了afterTax一個瞬態屬性) 問題是數據綁定告訴我,一個空的屬性(beforeTax)無效。這是真的,所以爲了解決我的問題,我使beforeTax成爲了一個可以爲空的值,現在它可以工作。 這不是真的想要我想要的,因爲值不應該爲空,但這是我目前得到的最好。 – user1020194

+0

我想我需要一段代碼,它顯示了你的對象的創建/保存。否則我不能再幫你了,對不起;) – Chris

1

如果我正確理解你的問題,你想計算beforeTax基於afterTax的值?

您可以使用事件處理函數beforeXXX()其中XXX是驗證,插入和更新來計算beforeTax。然後,在稅前約束可以爲空:false。

def beforeValidate() { 
    computeBeforeTax() 
}