2

环境: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],但无济于事。

4

2 回答 2

5

您可以注册一个自定义属性编辑器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)
}
于 2012-10-01T22:18:43.527 回答
0

也许您可以使用这样的自定义验证器:

static constraints = {
        anInteger validator: {
            //aDomainObject. anInteger.invalid.type
            if (!(it instanceOf Integer)) return ['invalid.type']
        }
    }
于 2012-10-01T21:56:00.807 回答