【问题标题】:Grails - Domain object doesn't validate correctlyGrails - 域对象无法正确验证
【发布时间】:2014-10-25 10:25:36
【问题描述】:

我正在尝试使用 jQuery Datepicker 设置一个人的出生日期。但是,我得到的只是Property dateOfBirth must be a valid Date

所以,我的控制器最初是这样的:

def update(Person personInstance) {
    if (personInstance == null) {
        // do Something
        return
    }

    if (personInstance.hasErrors()) {
        respond personInstance.errors, view: 'edit'
        return
    }

    // do the rest
}

我发现,对于 jQuery,我应该使用 SimpleDateFormat 对象来生成正确的 Date 对象。尽管如此,即使我直接将新的 Date 对象分配给 dateOfBirth 并随后验证 personInstance 域对象 - 就像在下面的代码段中一样 - 我仍然会收到 Property dateOfBirth must be a valid Date 错误。

def update(Person personInstance) {
    if (personInstance == null) {
        // do Something
        return
    }

    // added code
    personInstance.dateOfBirth = new Date()
    personInstance.validate()
    // added code

    if (personInstance.hasErrors()) {
        respond personInstance.errors, view: 'edit'
        return
    }

    // do the rest
}

感谢您的帮助:)

【问题讨论】:

  • 您仍然看到错误的原因是因为在绑定您的命令/域对象后会自动调用验证。在手动调用personInstance.validate() 之前使用personInstance.clearErrors()。您可以在文档中查看更多相关信息:grails.org/doc/2.2.x/ref/Domain%20Classes/clearErrors.html
  • 感谢您的提示 :) 现在它可以完美运行了!
  • 我应该添加它作为答案吗?
  • 您还可以使用字段上方的@BindingFormat 注释将日期绑定为从客户端接收到的格式。更多信息在这里:grails.org/doc/2.4.x/api/org/grails/databinding/…
  • 谢谢@NikhilBhandari。效果同样好,甚至为我节省了几行代码!

标签: validation grails domain-object


【解决方案1】:

您仍然看到错误的原因是因为在调用方法时绑定您的命令/域对象后会自动调用验证。

在手动调用personInstance.validate() 之前使用personInstance.clearErrors() 以清除任何现有的绑定/验证错误。您可以在documentation 中查看更多相关信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多