验证命令对象中的嵌套域类实例

时间:2017-10-24 05:06:34

标签: validation grails command-objects

我尝试在命令对象上验证嵌套域类实例。

拥有以下命令对象

package demo

import grails.databinding.BindingFormat

class SaveEventCommand {

    @BindingFormat('yyyy-MM-dd')
    Date date

    Refreshment refreshment

    static constraints = {
        date validator: { date -> date > new Date() + 3}
        refreshment nullable: true
    }
}

让以下域类具有自己的约束

package demo

class Refreshment {

    String food
    String drink
    Integer quantity

    static constraints = {
        food inList: ['food1', 'food2', 'food3']
        drink nullable: true, inList: ['drink1', 'drink2', 'drink3']
        quantity: min: 1
    }
}

我需要当refreshment不可为空时,命令对象验证date属性并检查refreshment实例中的相应限制

现在尝试在控制器中使用此代码:

def save(SaveEventCommand command) {
    if (command.hasErrors() || !command.refreshment.validate()) {
        respond ([errors: command.errors], view: 'create')

        return
    }

    // Store logic goes here
}

这里通过!command.refreshment.validate()我尝试验证刷新实例,但是我得到的结果是没有错误,即使传递的数据不正确。

感谢任何指导,感谢您的时间

2 个答案:

答案 0 :(得分:0)

我能想到的两件事:

  1. Implement grails.validation.Validateable on your command object
  2. 当您提供无效日期时会发生什么?你在验证时能看到错误吗?

答案 1 :(得分:0)

我通常只包含一些代码,这些代码将使用自定义验证程序启动对由另一个命令对象组成的任何属性的验证。例如:

Traceback (most recent call last):
    File "main.py", line 3, in <module>
    smtpserver = s.connect("mail.btinternet.com", 465)
NameError: name 's' is not defined
exited with non-zero status

这种方式非常清楚我希望验证发生。此外,它将所有错误移动到根错误集合中,这使我的事情变得非常简单。