2017-02-10 10 views
0

У меня есть валидатор, и он правильно заполняет оба контейнера паролем с тегом has-error. Но как избавиться от одного из двух сообщений об ошибках, созданных errors.rejectValue()?grails custom validator: force no message

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 
    } 
} 

Другая возможность будет, сказать весной, чтобы положить has-error тег во второй контейнер пароля.

+0

звучит так, будто вы этого хотите, но вы этого не хотите. Я имею в виду, что он показывает, имеет ли ошибка ошибки? заключается в том, что, поскольку у него была ошибка в этом экземпляре, значит, есть ошибка-ошибка, поэтому, если вы не хотите, чтобы второе сообщение не возвращало его, но тогда вы не получите свою ошибку, вы можете проанализировать свои ошибки и выбрать игнорировать это является альтернативой http://stackoverflow.com/questions/31732452/grails-add-validation-error-to-haserrors. попробуйте установить эту ошибку на отсутствие вывода для начала, чтобы увидеть, делает ли это то, что вы хотите – Vahid

+0

Проблема возникает, когда пароли не совпадают, я хочу, чтобы контейнеры имели этот красный пограничный стол вокруг них, но я не хочу, чтобы 2 появляется предупреждение о том, что пароли не совпадают. – sch0rschi

+0

http://stackoverflow.com/questions/19323652/changing-twitter-bootstrap-validation-states-of-a-control-group-in-grails, как упоминалось ранее, посмотрите на изменение ошибки в gsp в этом случае. выше может дать ключ – Vahid

ответ

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

сделал свою работу.

0

так несколько идей, там я думаю, что на из самых простых вариантов будет Java Script и вот как я бы об этом:

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

Так как загрузки страницы, если пароль содержит ошибку, то он создает/that js msg и пароль для проверки подлинности. Затем вы создаете password.error в messages.properties и устанавливаете это сообщение.

Поскольку пользователь пытается отправить форму снова, он будет настаивать на том же предупреждении. так что вам, возможно, потребуется некоторая форма другого дополнения, такие как:

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

Теперь это говорит это, чтобы сбросить пользовательскую действительность ничего, когда он имеет новое значение. поэтому пользователь может снова отправить форму.

Скорее легко и безболезненно против необходимости кодов ошибок/игнорирования. Теперь только проверить и вернуть одну ошибку для первого пароля Javascript будет сделать следующий бит для вас