环境: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],但没有用。
答案 0 :(得分: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)
}
答案 1 :(得分:0)
也许您可以使用这样的自定义验证器:
static constraints = {
anInteger validator: {
//aDomainObject. anInteger.invalid.type
if (!(it instanceOf Integer)) return ['invalid.type']
}
}