我有一个用于更新密码的 Grails 命令对象。它看起来像这样:
class UpdatePasswordCommand {
String password
static constraints = {
password blank: false,
nullable: false,
size: 8..64,
matches: someLongRegex
validator: { String password, command ->
if (someService.isPasswordSameAsUsername(password)) {
return 'password.invalid.sameasuser'
}
}
我遗漏了与我要问的问题无关的所有内容。
我遇到的问题是,每当此验证触发时,它将触发所有验证,并且该command.errors
集合将为每个验证失败提供一条错误消息。这意味着,例如,如果用户尝试使用test作为密码,他们将收到以下错误消息:
* Password length must be between 8 and 64 characters.
* Password must not be the same as the user name.
* Password must contain at least one special character, uppercase letter, and digit.
在这种情况下,如果密码长度错误,我希望验证在该点停止。同样,如果它与用户名相同,我不希望它检查正则表达式。有什么方法可以让 Grails 验证只返回特定属性的第一次验证失败?请注意,我只希望它按属性停止,这一点很重要,因为例如,如果用户不输入他的确认密码,我仍然想显示两条错误消息:
* Password length must be between 8 and 64 characters.
* You must enter a confirm password.