Grails にはデータ バインディングに関するバグがあり、不正な数値入力を処理しているときにキャスト例外がスローされます。ジラ: http://jira.grails.org/browse/GRAILS-6766
これを修正するために、次のコードを作成して、にある POGO クラスの数値入力を手動で処理しFoo
ました。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();
}
}
次の行では、null 参照例外がスローされますerrors.reject()
。
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()