【问题标题】:What the difference between the blank and nullable in the grails domain class constraints?grails域类约束中的空白和可为空有什么区别?
【发布时间】:2019-10-16 03:31:45
【问题描述】:
刚刚看到这个 grails 约束的例子,但是为什么不把约束留空,我认为nullable 和 blank 将具有相同的功能。
class User {
String firstName
String lastName
String passwordHash
static constraints = {
firstName blank: false, nullable: false
lastName blank: false, nullable: false
passwordHash blank: false, nullable: false
}
}
【问题讨论】:
标签:
grails
groovy
constraints
grails-domain-class
【解决方案1】:
默认情况下,所有域类属性都不能为空(即它们具有隐式nullable: false 约束)。
约束:
-
blank - 验证字符串值不为空。如果字符串值不能为空,则设置为 false。
如果字符串是null,则不会使用blank: true 进行验证。在这种情况下,将nullable 约束设置为true。
-
nullable - 允许将属性设置为 null。默认情况下,Grails 不允许属性使用 null 值。 - 默认为false。
如果属性允许空值,则设置为 true。
但为什么不把空白作为约束,我认为可为空和空白都具有相同的功能
表单提交产生的 Web 请求将具有空白字符串,而不是 null,用于没有值的输入字段。在对不可为空的属性进行批量属性绑定时,请记住这一点。默认行为是空字符串不会验证nullable: false,因为数据绑定器会将blank 字符串转换为null。这包括空字符串和空字符串。
空字符串是任何字符串,这样trim() 方法会返回一个空字符串。要关闭空字符串到 null 的转换,请将 application.groovy 中的 grails.databinding.convertEmptyStringsToNull 属性设置为 false。
详情请咨询documentation。
希望对你有帮助。