首页 > 解决方案 > grails域类约束中的空白和可为空有什么区别?

问题描述

刚刚看到这个 grails 约束的例子,但是为什么不把约束留空,我认为两者都nullableblank具有相同的功能。


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
    }
}

标签: grailsgroovyconstraintsgrails-domain-class

解决方案


默认情况下,所有域类属性都不能为空(即它们具有隐式nullable: false约束)。

约束:

  • blank- 验证字符串值不为空。false如果字符串值不能为空,则设置为。

如果字符串是null,则不会使用 验证blank: true。在这种情况下,将nullable约束设置为true

  • nullable- 允许将属性设置为null。默认情况下,Grails 不允许null属性值。-默认false. 如果属性允许空值,则设置为 true。

但是为什么不把空白作为约束,我认为可为空和空白都具有相同的功能

对于没有值的输入字段,表单提交产生的​​ Web 请求将具有空白字符串,而不是 null 。在对不可为空的属性进行批量属性绑定时,请记住这一点。默认行为是不会验证空白字符串,nullable: false因为数据绑定器会将blank字符串转换为null. 这包括空字符串和空字符串。

空字符串是任何字符串,使得该trim()方法返回一个空字符串。关闭空字符串的转换以在 application.groovy中null设置grails.databinding.convertEmptyStringsToNull属性。false

请参阅文档以获取更多详细信息。

希望这会帮助你。


推荐阅读