#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.