Validation 我无法根据grails“inList”中的一组double验证double

Validation 我无法根据grails“inList”中的一组double验证double,validation,grails,Validation,Grails,我是grails的新手,所以我希望不要因为我的疏忽而让自己难堪,但我已经两次尝试过这个问题,并且经历了“inList”从双打列表中验证的一贯失败。我查找了有关此问题的先前报告,并找到了一份。这就是: 我想根据具有inList约束的可接受的double列表验证double类型的字段。scaffold生成的逻辑使用g:select在网页上正确显示double列表。当我从下拉列表中选择任何有效的double时,域类中的“inList”验证将拒绝它们。例如,如果我从下拉列表中选择了“2.0”,我会在网页

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

我想根据具有inList约束的可接受的double列表验证double类型的字段。scaffold生成的逻辑使用g:select在网页上正确显示double列表。当我从下拉列表中选择任何有效的double时,域类中的“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 正在重新加载活动:真 控制器:2 域名:1 默认情况下,1.0是BigDecimal。 [1.0,2.0,3.0,4.0]是BigDecimal的列表。 在上述列表中找不到Double

断言!1.0D英寸[1.0,2.0,3.0,4.0]

使用 inList:[1D、2D、3D、4D] 或 inList:1..4*.toDouble


而是在约束中。

感谢您提供了非常令人满意的解决方案。在我处理验证问题的过程中,我编写了一个自定义验证器,其中包含以下内容:[1.0,2.0,3.0,4.0]find{ot->ot.equalsitt}我无法理解它为什么会失败。这不是您的解决方案的另一种表现形式吗:[]{.equals}?顺便说一句,当我用“ot.equalsitt”替换“ot==itt”时,这个闭包确实对我有用。所以,==必须更能容忍左右两侧不同的数据类型?如果您最近开始使用Groovy/Grails,这是个好问题。请参阅以获取您的答案。概要:在Groovy中==表示等于。我打赌你会喜欢这本书的。