В Spring 5, как я могу настроить сообщение об ошибке проверки формы? - PullRequest
0 голосов
/ 02 октября 2018

Я использую Spring 5.1.Я хочу написать валидатор для формы, которую я отправляю, и я хотел бы настроить одно из сообщений об ошибках, которое возвращается.У меня есть сообщение об ошибке, хранящееся в файле свойств ...

already.taken.registration.username=There is already an account created with the username {0}.  Did you forget your password?

Обратите внимание на "{0}", где я хотел бы ввести неверное имя пользователя, введенное пользователем.Так что в моем валидаторе у меня есть

import org.springframework.validation.Validator;
...
public class RegistrationFormValidator implements Validator
{

    ...
    @Override
    public void validate(final Object target, final Errors errors)
    {
        final RegistrationForm regForm = (RegistrationForm) target;

        if (regForm != null && 
                   !StringUtils.isEmpty(regForm.getEmail()) &&
                   userWithEmail(regForm.getEmail()) ) {
            errors.rejectValue("email", "already.taken.registration.username", regForm.getEmail());
        }   // if

Однако, когда запускается определенная ветвь, {0} не заполняется, несмотря на то, что я убедился, что regForm.getEmail () "не пусто.Я вижу это напечатанным на моей странице JSP

There is already an account created with the username {0}. Did you forget your password?

Как правильно заполнить сообщение об ошибке пользовательскими данными?

1 Ответ

0 голосов
/ 02 октября 2018
errors.rejectValue("email", "already.taken.registration.username", regForm.getEmail());

Это на самом деле вызовет метод

void rejectValue(@Nullable
             java.lang.String field,
             java.lang.String errorCode,
             java.lang.String defaultMessage)

. Вам нужно добавить массив объектов с аргументами:

void rejectValue(@Nullable
             java.lang.String field,
             java.lang.String errorCode,
             @Nullable
             java.lang.Object[] errorArgs,
             @Nullable
             java.lang.String defaultMessage)

Ваш вызов будет выглядеть примерно так:это:

errors.rejectValue("email", "already.taken.registration.username", new Object[] {regForm.getEmail()}, null);
...