Весной 3 лучший путь - это для использования аннотаций, если вы можете переключиться. Интеграция с API проверки бинов позволяет легко добавить проверку. Все, что вам нужно сделать для проверки бина формы, это добавить аннотацию @Valid (см. «5.7.4.1 Запуск проверки входных данных @Controller» в главе «Документация Spring MVC» 5. Проверка, привязка данных и преобразование типов) к аргумент метода контроллера. Затем Spring проверит bean-компонент и поместит ошибки проверки в BindingResult для вас.
@Controller
public class RegisterFormController {
...
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String submitFormHandler(@ModelAttribute("registration") @Valid User user, BindingResult errors) {
if (errors.hasErrors()) {
// send user back to form view
} else {
// handle form submission
}
}
...
}
В документах говорится, что Spring автоматически настроит фабрики и валидаторы проверки компонентов, но если это не сработает, вы можете легко настроить их вручную:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<!-- Configures Spring MVC DataBinder instances -->
<bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="validator" ref="validator" />
</bean>
</property>
</bean>
<!-- Creates the JSR-303 Validator -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
Я также создал проект, основанный на реализации проверки «valang» на стороне клиента из модуля Spring валидации, который может обеспечить проверку на стороне клиента в JavaScript на основе аннотаций проверки JSR-303 и Hibernate Validator.
http://kenai.com/projects/jsr303js
Проект предоставляет файл taglib / JavaScript, который вы включаете для помещения основного кода JavaScript на страницу, а затем еще один тег, который вы помещаете где-то в свой тег Spring <form:form></form:form>
для запуска проверки.
<%@ taglib prefix="jsr303js" uri="http://kenai.com/projects/jsr303js/" %>
...
<head>
...
<script type="text/javascript" src="<c:url value="/js/jsr303js-codebase.js"/>"></script>
...
</head>
<body>
...
<form:form name="regForm" commandName="registration" method="post">
...
<jsr303js:validate commandName="registration"/>
...
</form:form>