我是grails的新手,所以我希望不要因为我的疏忽而让自己感到尴尬,但是我已经对这个问题进行了两次实验,并且经历了'inList'从双精度对象列表进行验证的一致失败。我查找了这个问题的先前报告,并找到了一个。这里是:
我想用inList约束对可接受的双精度值列表验证一个double类型的字段。脚手架生成的逻辑使用g:select在网页上正确地显示双精度数列表。当我从下拉列表中选择任何有效的双精度值时,域类中的"inList"验证会拒绝它们。例如,如果我从下拉列表中选择"2.0",我在网页上得到这个错误消息:
类[class demo2]的属性[浮]。值为[2]的FloatsOkInList不包含在列表[[1.0,2.0,3.0,4.0]]
好的,我可以看到'2.0'已经被条纹化回'2',所以在往返过程中,我的提交可能已经被格式化以显示或转换为整数或字符串。但是我的代码没有完成这个转换。我的控制器是未修改的纯模板。我的域名代码是:
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'对double类型的列表进行验证是不合理的。
应用程序状态应用版本:0.1Grails版本:2.2.1Groovy版本:2.0.7JVM版本:1.7.0_01重新加载活动:true控制器:2域:1div…
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()