我有一个用户注册表格,其中使用命令对象来验证字段。字段之一是复选框,在进行注册之前必须选中该复选框,并且该复选框不会保存到域对象。此复选框在命令对象中具有一个对应的 bool(boolean) 字段。如果未选中该复选框,则从自定义验证器抛出验证错误。

问题是,此错误不会在<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'/>

如何解决呢?

最佳答案

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

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

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


//messages.properties
registerCommand.termsChecked.required.termsChecked=blah

10-05 23:36