grails自定义验证器:强制没有消息

时间:2017-02-10 11:47:05

标签: spring grails

我有一个验证器,它正确填充了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标记放入第二个密码容器中。

2 个答案:

答案 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']
}

完成了这项工作。