我是grails的新手,所以我希望不会因为疏忽而让自己难堪,但我已经尝试过两次这个问题,并经历了从替身列表中验证'inList‘的持续失败。我寻找了关于这个问题的以前的报告,并找到了一个。所以就是这样:
我想用inList约束根据可接受的double列表来验证double类型的字段。脚手架生成的逻辑确实使用g:select在网页上正确地显示替身列表。当我从下拉列表中选择任何有效的doubles时,域类中的'inList‘验证都会拒绝它们。例如,如果我从下拉列表中选择了'2.0‘,我会在网页上看到这样的错误消息:
值为2的类demo2.FloatsOkInList的属性aFloat不包含在列表[1.0,2.0,3.0,4.0]中
好的,我可以看到'2.0‘已经被带回了'2',所以在往返过程中,我的提交可能已经被格式化以显示,或者被转换为Integer或String。但是我的代码没有完成这种转换。我的控制器是我没有修改过的纯模板。我的域名代码是:
class FloatsOkInList {
String aKey
Double aFloat
static constraints = {
aKey unique : true, blank : false
aFloat blank : false , inList :[ 1.0, 2.0, 3.0, 4.0]
}
}
该视图将生成一个如下所示的字段:
<g:select name="aFloat" from="${floatsOkInListInstance.constraints.aFloat.inList}" required="" value="${fieldValue(bean: floatsOkInListInstance, field: 'aFloat')}" valueMessagePrefix="floatsOkInList.aFloat"/>
我不认为期望'inList‘验证一个替身列表是不合理的。
应用程序状态应用程序版本:0.1Grails版本: 2.2.1 Groovy版本:2.0.7JVM版本: 1.7.0_01重新加载活动:真实控制器:2个域:1 ...
发布于 2013-05-09 02:15:28
默认情况下,1.0
为BigDecimal
。
[ 1.0, 2.0, 3.0, 4.0]
是BigDecimal的列表。
在上面的列表中找不到Double
。
assert !1.0D in [1.0, 2.0, 3.0, 4.0]
使用inList: [1D, 2D, 3D, 4D]
或inList: (1..4)*.toDouble()
而不是在约束中。
https://stackoverflow.com/questions/16453098
复制相似问题