Jim*_*ace 4 validation grails grails-2.0
Grails有关于数据绑定的错误,因为当你处理错误的数字输入时它会抛出一个强制转换异常.JIRA:http://jira.grails.org/browse/GRAILS-6766
为了解决这个问题,我编写了以下代码来手动处理Foo位于的POGO类的数字输入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();
}
}
Run Code Online (Sandbox Code Playgroud)
以下命令会在该errors.reject()行上引发空引用异常.
foo.price = "asdf" // throws null reference on errors.reject()
foo.validate()
Run Code Online (Sandbox Code Playgroud)
但是,我可以说:
foo.validate()
foo.price = "asdf" // no Null exception
foo.hasErrors() // false
foo.validate()
foo.hasErrors() // true
Run Code Online (Sandbox Code Playgroud)
validate()调用时错误从何而来?有没有办法在errors不validate()先调用的情况下添加属性?
我不能确切地告诉你原因,但你需要getErrors()明确地调用而不是errors像属性一样访问它.出于某种原因,Groovy没有为它调用方法.因此,将reject行更改setPrice()为
getErrors().reject(
'trade.price.invalidformat',
[priceString] as Object[],
'Price:[{0}] is an invalid price.')
getErrors().rejectValue(
'price',
'trade.price.invalidformat')
Run Code Online (Sandbox Code Playgroud)
这是确保Errors方法中存在对象的最简单方法.您可以查看将验证相关方法添加到域类的代码.
| 归档时间: |
|
| 查看次数: |
1243 次 |
| 最近记录: |