【问题标题】:Difference between blank and null constraints空白和空约束之间的区别
【发布时间】:2015-03-23 04:04:01
【问题描述】:

空白和空约束有什么区别?

我有以下课程

class Task {

    String title
    String notes
    TekUser assignedTo
    Date dueDate
    TekEvent event

    static constraints = {
        title blank:false
        notes blank: true , maxSize: 5000
        assignedTo nullable:true
        dueDate nullable:true
    }

    static belongsTo = TekEvent
}

即使我指定了notes blank : true,创建的 mysql 表的注释也设置为非空

blank : true 有什么作用?

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:
    • blank:true 表示该字段接受空字符串或仅由空格组成的字符串作为有效值。例如:""" "
    • nullable:true 表示该字段接受 null 作为有效值

    它们可以一起使用。例如:

    title blank:false, nullable: true
    

    【讨论】:

    • 但我仍然无法理解为什么表格中的notes 列设置为not null
    • 默认情况下,Grails 不允许属性为空值(例如:nullable: false)。如果你想要一个空值,你需要明确地表达它 -> nullable: true
    • 因此,您可能希望注释列的约束为:nullable: true, blank: true, maxSize: 500
    【解决方案2】:

    虽然 aruizca 的回答是正确且具有描述性的,但我在阅读 Burt Beckwith 的《Programming Grails》一书时发现了这一点。

    空白与空值 在许多情况下,空字符串和 null 是 等效 - 没有设置值。但是来自网络的 HTTP 提交 浏览器 POST 请求为没有值的输入发送空白字符串。 非 HTTP 数据不会出现这种情况,例如来自其他 外部客户端,例如 Web 服务或在测试期间,因此转换 HTTP 层的空白到空值将有助于简化验证。尽管 我们已经完成了,我们还可以从提交的内容中修剪额外的空白 价值观。

    它可能与您的问题无关。 Aruizca 的答案就是您所需要的,但这可能是有关空白和空值的附加信息。

    【讨论】:

    • 这帮助我查明了 BootStrap 生成的测试数据的问题:map 构造函数将空字符串转换为空值,因此我必须在构造函数调用后设置属性以满足 nullable:false、blank:true 验证.谢谢!
    【解决方案3】:

    其他答案都是正确的,但要解决您的问题:

    创建的 mysql 表的注释设置为非空,即使我 指定注释空白:true

    blank : true 有什么作用?

    blank: false 防止在该字段上设置空值(例如“”、“”等)。这与mysql上具有约束NOT NULL的字段无关。发生这种情况是因为 Grails 将每个字段的 default 限制为 nullable: false,除非您明确将其设置为 nullable: true

    【讨论】:

    • 如果没有给出blank 约束,具有nullable: false 约束的字段是否接受空字符串?
    • 刚刚检查,默认行为是空白字符串不会验证nullable: false,因为数据绑定器会将空白字符串转换为null。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多