2012-03-07 2 views
1

У меня возникли проблемы с настройкой валидации для формы весной.Проверка jsr-303 в весеннем приложении mvc не подтверждается

боб Я хотел бы проверить выглядеть следующим образом:

public class RegistrationForm extends ProjectXUser { 
@NotEmpty 
private String password2; 

@NotBlank 
@AssertTrue 
private Boolean agreedToConditions; 
... 

ProjectXUser наследует от BaseUser, который имеет некоторые дополнительные свойства, которые также аннотированные.

Мой контроллер выглядит следующим образом:

@Controller 
public class RegistrationController { 
private static final String REGISTRATION_JSP = "registration"; 

@ModelAttribute("registrationForm") 
public RegistrationForm getRegistrationForm() { 
    return new RegistrationForm(); 
} 

@RequestMapping(value = { "/registratie/jaar", "registratie/proef" }, method = RequestMethod.GET) 
public String year() { 
    return "registration"; 
} 

@RequestMapping(value = { "/registratie/jaar", "registratie/proef" }, method = RequestMethod.POST) 
public ModelAndView register(@Valid RegistrationForm registrationForm, BindingResult result) { 
    if (result.hasErrors()) { 
    return new ModelAndView(REGISTRATION_JSP); 
    } else { 
    return new ModelAndView("redirect:/registratie/success"); 
    } 
} 
} 

Мой конфигурационный файл содержит пружинный:

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 
<mvc:annotation-driven /> 

Я прочитал в документации яровой, что если валидатор JSR-303 присутствует в классе пустая пружина будет автоматически обнаруживать его и использовать. Таким образом, я добавил hibernate-validator к моему pom.

Но когда я отлаживаю свой контроллер, я вижу, что registrationForm содержит значения, которые я заполнил. Но результаты всегда имеют 0 ошибок. Даже если я введу явный неправильный ввод в поля формы.

+0

Возможно, вы используете , чтобы ваш @Controller работал, но является ли ваш класс RegistrationForm в сканируемом пакете? –

+0

Да, я использую . Это scanneing org.x.y, а моя RegistrationForm находится в org.x.y.web.forms. Поэтому он должен поднять его. –

+0

Если вы проверяете вручную с помощью 'validator.validate (registrationForm)', это работает? – tbruyelle

ответ

0

Если этот бит кода увольняет и перенаправляет обратно на страницу регистрации

if (result.hasErrors()) { 
    return new ModelAndView(REGISTRATION_JSP); 
} 

Тогда ваша проверка JSR-303 в настоящее время подобран. Вы должны показать свои ошибки на странице JSP, как этот

<form:errors path="password2" cssClass="error" /> 

где cssClass="error" является CSS вы хотите, чтобы отобразить сообщение об ошибке с. Он автоматически помещается в <div> для вас.

Смежные вопросы