属性类型的默认约束

时间:2014-01-09 11:19:42

标签: grails constraints

Config.groovy中,可以指定将应用于所有属性的默认约束,例如

grails.gorm.default.constraints = {
    '*'(nullable: true)
}

有没有办法为某种类型的属性指定默认约束?例如,如果我想为所有(blank: false)属性添加String约束,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

不确定是否为某种类型添加默认约束,但在Programming Grails中,Burt建议使用过滤器来处理空白字段:

class SiteFilters {
    def filters = {
        blankToNullAndTrim(controller: '*', action: '*') {
            before = {
                if (request.post) {
                    convertBlanksToNullsAndTrim(params)
                }
                true
            }
        }
    }
    private static void convertBlanksToNullsAndTrim(Map map) {
        def keys = [] + map.keySet() // copy to avoid
        //ConcurrentModificationException
        for (name in keys) {
            def value = map[name]
            if (value instanceof String) {
                value = value.trim()
                if (value.length() == 0) {
                    map[name] = null // don't remove - explicity set to null
                } else {
                    map[name] = value // update if trimmed
                }
            } else if (value instanceof Map) {
                // recurse with empty nested param, e.g., "location":["id":""]
                convertBlanksToNullsAndTrim value
            }
        }
    }
}

这样就不需要添加blank:false

此外,在Grails 2.3.x中,此行为已更改:默认情况下,所有空白和空字符串将在数据绑定期间(可配置)转换为null。