我有一个用户注册表格,其中使用命令对象来验证字段。字段之一是复选框,在进行注册之前必须选中该复选框,并且该复选框不会保存到域对象。此复选框在命令对象中具有一个对应的 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