我有一个用户注册表单,其中使用命令对象验证字段。其中一个字段是一个复选框,必须在继续注册之前进行检查,并且它不会保存到域对象中。此复选框在命令对象中具有相应的布尔字段。如果未选中复选框,则会从自定义验证程序中抛出验证错误。
问题是,此错误未在<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'/>
如何解决这个问题?
答案 0 :(得分:3)
如果将3个参数传递给验证器,最后一个参数为errors
,则忽略返回代码,认为Spring Errors正在处理错误。
如果要使用错误代码,则只需将2参数作为
传递给验证器static final termsCheckedValidator = {termsChecked, command ->
if (!command.termsChecked) {
return ['required.termsChecked']
}
}
//messages.properties
registerCommand.termsChecked.required.termsChecked=blah