0

我有一个用户注册表单,其中使用命令对象验证字段。其中一个字段是一个复选框,在继续注册之前必须选中它,并且它不会保存到域对象中。此复选框在命令对象中有一个对应的布尔字段。未选中复选框时,自定义验证器会引发验证错误。

问题是,这个错误没有在<g:renderErrors bean="${command}" as="xml"/>块中传播(验证器被正确触发)。

命令对象:

class RegisterCommand {

...
Boolean termsChecked
...
static constraints = {
    ...
    termsChecked validator: RegisterController.termsCheckedValidator
}

验证器:

static final termsCheckedValidator = {termsChecked, command, errors ->
    if (!command.termsChecked) {
        return 'registerCommand.termsChecked.required'
    }
}

GSP 文件中的复选框:

<g:checkBox value="${command.termsChecked}" bean="${command}" name='termsChecked'/>

这怎么可能解决?

4

1 回答 1

3

如果您将 3 个参数传递给验证器,最后一个是,errors则返回代码将被忽略,认为 Spring 错误正在处理错误。

如果要使用错误代码,只需将 2 参数传递给验证器

static final termsCheckedValidator = {termsChecked, command ->
    if (!command.termsChecked) {
        return ['required.termsChecked']
    }
}


//messages.properties
registerCommand.termsChecked.required.termsChecked=blah
于 2013-10-10T15:02:28.547 回答