【问题标题】:grails custom validator: force no messagegrails自定义验证器:强制没有消息
【发布时间】:2017-02-10 11:47:05
【问题描述】:

我有一个验证器,它用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 标签放入第二个密码容器中。

【问题讨论】:

  • 听起来你想要它,但你不想要它。我的意思是它显示了 has-error 标签,为什么?是因为它在该实例上有错误因此显示 has-error 所以如果你不希望第二条消息不要返回它但是你不会得到你的错误,你可以解析你的错误并选择忽略那个是替代stackoverflow.com/questions/31732452/…。尝试将该错误设置为无输出以查看是否符合您的要求
  • 当密码不匹配时会出现问题,我希望容器周围有这个红色边框,但我不希望弹出 2 个警报,说明密码不匹配.
  • stackoverflow.com/questions/19323652/… 如前所述,看看在这种情况下更改 gsp 中的错误。以上可能提供线索
  • sorry : github.com/grails/grails-core/blob/master/grails-web-gsp-taglib/… 基本上,您希望拦截它的正常工作方式,并且该特定页面上的特定消息具有不同的行为 - 制作您自己的错误页面,忽略该特定字段错误。或者,您可以使两个失败都只失败 1 个字段。为了突出显示另一个框,似乎需要做很多工作。可能更容易在 1 更改时使用一些 js 事件触发更改.. 和失败 1

标签: spring grails


【解决方案1】:

所以我认为最简单的选项中的一些想法是 java 脚本,这就是我将如何去做:

<script>
<g:if test="${instance.password.hasErrors()}">
 var msg="${g.message(code:'password.error')}";
 $('#password2')[0].setCustomValidity(msg);
</g:if>
</script>

所以当页面加载时,如果密码有错误,那么它会创建/该 js msg 和密码自定义有效性。 然后在 messages.properties 中创建 password.error 并将其设置为消息。

当用户尝试再次提交表单时,它会推送同样的警告。所以您可能需要某种形式的其他添加,例如:

$('#password2').on('change', function() {
  $('#password2')[0].setCustomValidity('');
})

现在它告诉它在有新值时将自定义有效性重置为空。所以用户现在可以再次提交表单。

与必须匹配错误代码/忽略相比,这相当简单和轻松。现在只验证第一个密码并返回一个错误 javascript 将为您做下一点

【讨论】:

    【解决方案2】:

    这很丑,但在 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']
    }
    

    完成了任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多