2

我是 grails 的新手,所以我希望不要因为我的疏忽而让自己难堪,但是我已经两次尝试过这个问题,并且经历了 'inList' 从双打列表中验证的一贯失败。我查找了有关此问题的先前报告,并且可以找到一个。所以这里是:

我想使用 inList 约束根据可接受的双精度列表验证双精度类型的字段。脚手架生成的逻辑确实使用 ag:select 在网页上正确显示双精度列表。当我从下拉列表中选择任何有效的双精度时,域类中的“inList”验证会拒绝它们。例如,如果我从下拉列表中选择“2.0”,我会在网页上收到以下错误消息:

值为 [2] 的类 [class demo2.FloatsOkInList] 的属性 [aFloat] 不包含在列表 [[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”根据双打列表进行验证并不是不合理的。

应用程序状态应用程序版本:0.1 Grails 版本:2.2.1 Groovy 版本:2.0.7 JVM 版本:1.7.0_01 重新加载活动:true 控制器:2 域:1 ...

4

1 回答 1

1

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

而是在约束中。

于 2013-05-09T02:15:28.070 回答