环境: Grails 2.0.4, Java 1.6.0
我想对需要整数值的域对象值施加约束,以防止输入十进制值。在视图中输入 3.3 会导致创建的值为 3 的对象。我希望有一个验证错误,该错误将被踢回给用户,表明只有整数值有效。
class ADomainObject {
Integer anInteger
}
控制器
def save() {
// Note: params["anInteger"] = "3.3"
ADomainObject aDomainObject = new ADomainObject(params)
aDomainObject.save flush:true
}
导致 aDomainObject.anInteger 的持久性 = 3
导致失败需要什么类型的约束?我尝试使用范围约束 [0..1000],但无济于事。
您可以为Integers
注册自定义属性编辑器,以仅允许严格允许整数值。以下内容将适用于绑定所有整数。
class IntegerEditor extends java.beans.PropertyEditorSupport {
void setAsText(String text) {
value = Integer.parseInt(text)
}
}
class CustomPropertyEditorRegistrar implements org.springframework.beans.PropertyEditorRegistrar {
void registerCustomEditors(org.springframework.beans.PropertyEditorRegistry registry) {
registry.registerCustomEditor(Integer, new IntegerEditor())
}
}
然后在 resources.groovy 中:
beans = {
customPropertyEditorRegistrar(CustomPropertyEditorRegistrar)
}
也许您可以使用这样的自定义验证器:
static constraints = {
anInteger validator: {
//aDomainObject. anInteger.invalid.type
if (!(it instanceOf Integer)) return ['invalid.type']
}
}