Grails GORM整数验证

pts*_*tsw 2 grails grails-orm

环境:Grails 2.0.4,Java 1.6.0

我想对需要整数值的域对象值进行约束,以防止输入十进制值.在视图中输入3.3会导致正在创建的对象值为3.我希望验证错误将被踢回用户,指示只有整数值有效.

class ADomainObject {
    Integer    anInteger
}
Run Code Online (Sandbox Code Playgroud)

调节器

def save() {
   // Note: params["anInteger"] = "3.3"

   ADomainObject aDomainObject = new ADomainObject(params)
   aDomainObject.save flush:true
}
Run Code Online (Sandbox Code Playgroud)

导致aDomainObject.anInteger = 3的持久性

导致失败需要什么类型的约束?我尝试使用范围约束,[0..1000]无济于事.

doe*_*eri 5

您可以注册自定义属性编辑器,Integers以仅允许严格的整数值.以下内容适用于绑定所有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())
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在resources.groovy:

beans = {
    customPropertyEditorRegistrar(CustomPropertyEditorRegistrar)
}
Run Code Online (Sandbox Code Playgroud)