我无法根据圣杯'inList'中的双精度列表验证双精度



我是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()

最新更新