我有一个验证器,它正确填充了has-error
标签的两个密码容器。但是如何摆脱errors.rejectValue()
生成的两个错误消息之一?
password blank: true, nullable: true, validator: { password, obj, errors ->
if (obj.password2 != password){
errors.rejectValue('password', 'invalid.matchingpasswords')
errors.rejectValue('password2', 'invalid.matchingpasswords')
return false
}
}
另一种可能性是告诉spring将has-error
标记放入第二个密码容器中。
答案 0 :(得分:0)
所以我想到的最简单选项的一些想法是java脚本,以下是我将如何去做:
<script>
<g:if test="${instance.password.hasErrors()}">
var msg="${g.message(code:'password.error')}";
$('#password2')[0].setCustomValidity(msg);
</g:if>
</script>
因此,如果密码有错误页面加载,那么它会创建/ js msg和密码自定义有效性。
然后,您在password.error
中创建messages.properties
并将其设置为消息。
当用户再次尝试提交表单时,它将推送相同的警告。所以你可能需要某种形式的其他添加,例如:
$('#password2').on('change', function() {
$('#password2')[0].setCustomValidity('');
})
现在告诉它在具有新值时将自定义有效性重置为空。所以用户现在可以再次提交表格。
相对容易和无痛而且必须匹配错误代码/忽略。现在只验证并返回第一个密码的一个错误javascript将为你做下一个
答案 1 :(得分:0)
这非常难看,但在UserController.groovy中添加了一个检查:
if (action.equals("edit")) {
model.fieldList += [property : 'password2',
message : 'user.password.repeat.label',
type : InputType.PASSWORD,
containerClass: userInstance.base.errors?.allErrors?.field.contains("password")?'has-error col-md-6': 'col-md-6',
labelClass : 'col-md-5',
inputClass : 'col-md-7']
}
完成了这项工作。