Grails在數據綁定方面存在一個錯誤,它在處理錯誤的數字輸入時會拋出一個轉換異常。 JIRA:http://jira.grails.org/browse/GRAILS-6766Grail的錯誤屬性來自哪裏?
爲了解決這個問題,我寫了下面的代碼來手動處理在位於src/groovy
void setPrice(String priceStr)
{
this.priceString = priceStr
// Remove $ and ,
priceStr = priceStr.trim().replaceAll(java.util.regex.Matcher.quoteReplacement('$'),'').replaceAll(',','')
if (!priceStr.isDouble()) {
errors.reject(
'trade.price.invalidformat',
[priceString] as Object[],
'Price:[{0}] is an invalid price.')
errors.rejectValue(
'price',
'trade.price.invalidformat')
} else {
this.price = priceStr.toDouble();
}
}
下拋出的errors.reject()
線空引用異常的POGO類Foo
的數字輸入。
foo.price = "asdf" // throws null reference on errors.reject()
foo.validate()
不過,我可以說:
foo.validate()
foo.price = "asdf" // no Null exception
foo.hasErrors() // false
foo.validate()
foo.hasErrors() // true
哪裏出錯來的時候validate()
叫? 有沒有辦法添加errors
屬性,而不是先撥打validate()
?
Hrm,我必須掩蓋POGO位,並假設它是一個域類 – doelleri 2013-03-11 22:53:00
@doelleri我認爲同樣的轉換也適用於域類,您鏈接的代碼只會觸發那些未被增強的域類在編譯時(這可能發生在開發模式自動重新編譯)。你值得接受,我只是在處理你的「我不能完全告訴你爲什麼」:-) – 2013-03-11 23:02:15