2014-01-09 47 views
1

Config.groovy中,可以指定將應用於所有屬性的默認約束條件,例如,屬性類型的默認約束條件

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

有沒有一種方法來指定某種類型屬性的默認約束?例如,如果我想爲所有String屬性添加(blank: false)約束,有沒有辦法做到這一點?

回答

1

不知道如何添加一個默認約束某種類型,但在Programming Grails,伯特提出一個過濾器來處理空白字段:

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。

+0

因此,Grails 2.3應用程序不需要此過濾器或'blank:false'約束,對吧? –

+0

是的,正確的(可能僅限於新的數據綁定API)。 –