SpringMVC: Как пометить два входа недействительными?

#java #spring-mvc #validation

#java #spring-mvc #проверка

Вопрос:

Я использую SpringMVC в своем веб-приложении для обработки форм и их проверки.

В моем валидаторе у меня есть такой код:

 @Override
public void validate(final Object target, final Errors errors)
{
    final LoginCommand loginCommand = (LoginCommand) target;
    if (checkCredentials(loginCommand.getLogin(), loginCommand.getPassword()) {
        errors.rejectValue("login", "login.error.invalid");
        errors.rejectValue("password", "login.error.invalid");          
    }
    //..
  

Таким образом, я получаю правильно отображаемый недопустимый при заполнении атрибута cssErrorClass.
Проблема сейчас в том, что сообщение login.error.invalid находится в списке сообщений об ошибках, который я собираюсь отобразить дважды.

Каков наилучший способ пометить два поля ввода недействительными, но иметь только одно сообщение в списке ошибок? Я просмотрел всю документацию / api SpringMVC и не нашел способа отклонить поле без предоставления сообщения.

Ответ №1:

Я предлагаю пометить всю форму как недействительную в этом случае:

 if (checkCredentials(loginCommand.getLogin(), loginCommand.getPassword()) {
    errors.rejectValue("login.error.invalid");         
}
  

И показать это на просмотр с помощью

 <form:errors />
  

Комментарии:

1. В общем случае это будет работать следующим образом с errors.reject(«login.error.invalid»). Но тогда конкретные поля <form:input> не получают стиль cssErrorClass, применяемый к классу-атрибуту.

Ответ №2:

Предполагая

<%@ taglib uri="spring.tld" prefix="s"%>
<%@ taglib uri="spring-form.tld" prefix="sf"%>

Вы должны ограничить тег sf:errors, поместив его в тег s:bind. Вот пример (путь, вероятно, неверен для ваших нужд, но подходит для этого примера), который ограничивает ошибки полем входа:

<s:bind path="LoginForm.login">
 <sf:ошибки/>
</s:bind>

Примечание: Я ввел это непосредственно в ответ, и прошло некоторое время с тех пор, как я использовал spring mvc.