gpt4 book ai didi

grails - Grails BigDecimal约束不起作用

转载 作者:行者123 更新时间:2023-12-02 14:33:28 24 4
gpt4 key购买 nike

我正在使用Grails 2.3.3版和groovy 2.1.8版。

我正在使用在线教程来帮助学习Grails Web开发,并且我创建了一个具有以下约束的 Realm 类

package racetrack



class Race {

static constraints = {
name(blank:false, maxSize:50)
city(blank:false)
state(inList:["GA", "NC", "SC", "VA"])
startDate()
distance(min: 0.0)
cost(min: new BigDecimal(0.0), max: new BigDecimal(100.0))
maxRunners(min:0, max:100000)
}

String name
Date startDate
String city
String state
BigDecimal distance
BigDecimal cost
Integer maxRunners

}

我正在使用脚手架,所以我具有完整的CRUD功能。问题是,当我创建一个新的Race时,该应用程序允许我在距离和费用字段中输入“-1”之类的值,而在费用字段中输入诸如“200”之类的值。我注意到Integer字段maxRunners正常工作,因为如果我尝试放入-1 maxRunners,它会显示警告消息。我将cost字段更改为Integer类型,然后约束开始起作用。

为什么会这样呢?我将教程中的代码复制并粘贴到我的文本文件中,并将约束不适用于BigDecimal类型字段。

最佳答案

根据minmax约束的文档,参数必须为

a class that implements java.lang.Comparable. The type of the value must be the same as the property.



因此,我看不出您的定义不起作用的任何原因。解决方法是,您可以尝试替换此
cost(min: new BigDecimal(0.0), max: new BigDecimal(100.0))


cost(range: 0..100)

您可以替换此约束:
distance(min: 0.0)

使用自定义验证程序,例如
distance validator: {
it >= 0.0
}

我刚刚注意到以下两个奇怪的问题出现在两个有问题的约束之前
startDate()

也许用以下任何一种替换它:
startDate(nullable: true)

要么
startDate(nullable: false)

可能会解决问题?

关于grails - Grails BigDecimal约束不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20315064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com