2015-02-19 2 views
2

В настоящее время я изучаю весну, но я придерживаюсь аннотации проверки, которая не работает с моим компонентом. Я действительно не понимаю, что не хватает, и я должен был бы на руку :)Проверка фасоли не работает

У меня есть контроллер:

@Controller 
public class CirclesController { 

    @RequestMapping(value = "/createCircle", method = RequestMethod.POST) 
    public ModelAndView createCircle(@Valid Circle circle, BindingResult res) { 

     if (res.hasErrors()) { 
      System.out.println("Can't validate this form.."); 
     else 
      System.out.println("Created new circle : " + circle); 
    } 
} 

И боб:

public class Circle { 

    @Size(min = 5)     // This is what I try to validate 
    private String  name; 

public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

Я настроил web.xml

<listener> 
    <listener-class> 
    org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     classpath:conf/dao-context.xml 
     classpath:conf/services-context.xml 
     classpath:conf/beans-context.xml 
    </param-value> 
</context-param> 

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

Project

Символ * -context.xml имеют компонент-сканирования и конфигурации-эту заметку метки:

<context:component-scan base-package="com.test.app.[package-name]"> 
</context:component-scan> 
<context:annotation-config></context:annotation-config> 
<tx:annotation-driven></tx:annotation-driven> 

У меня есть все внешние библиотеки (спящий режим, спящий режим-API, javax.validation) и нет ошибка в времени выполнения ... , но когда я заполняю поле «name» wit менее 5 символов, я всегда получаю «Созданный новый круг: Circle {name = txt}» вместо «Не могу подтвердить эту форму .. ».

EDIT:

Вот мой путь к классам:

classpath

и сервлет-context.xml:

<context:component-scan base-package="com.test.app.controllers"></context:component-scan> 
<mvc:annotation-driven></mvc:annotation-driven> 

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/WEB-INF/jsps/"></property> 
    <property name="suffix" value=".jsp"></property> 
</bean> 
+1

Circle {name = NomDuCercle}, откуда это название. Это более 5 символов! –

+0

глупый я, я wrotte плохой пример! Я обновляю этот вопрос ^^ – Adrien

ответ

7

Предоставление списка ваших зависимостей и круги-servlet.xml бы дать полный контекст вашему вопросу.

Тем не менее, для того, что я вижу, может отсутствовать только две вещи. Сначала убедитесь, что у вас есть поставщик проверки, такие как hibernate-validator на вашем пути к классам, второй убедитесь, что у вас есть

<mvc:annotation-driven /> 

элемент в вашем круги-сервлета.XML обеспечивает поддержку для обеспечения возможности проверки в отношении объектов параметров вашего контроллера снабженных @Valid

UPDATE после комментария

проверка боба имеет обновленную спецификацию, поэтому вы должны выровнять зависимости следующим образом

hibernate-validator-5.x.x 
validation-api-1.1.x 

, который будет реализовать JSR-349

ИЛИ

hibernate-validator-4.x.x 
validation-api-1.0.x. 

, который реализует JSR-303

Ваш вопрос от комментария означает, что вы, скорее всего, смешали зависимость, так что использовать спящий режим-валидатор-5.xx с проверкой-Апи-1.0.x или пропущенных это наоборот

+0

Благодарю вас за ваш проспект, я добавил это dependencie с maven, а затем в WEB-INF/lib, и я получил эту ошибку: SEVERE: Исключительный исходный контекст отправки событие для экземпляра слушателя класса org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем 'org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean # 0': вызов метода init не выполнен ; Вложенное исключение - java.lang.NoClassDefFoundError: javax/validation/ParameterNameProvider, любая идея? Большое спасибо ! – Adrien

+1

См. Здесь: Несоответствие зависимости: http://stackoverflow.com/questions/24652753/java-lang-noclassdeffounderror-javax-validation-parameternameprovider –

+0

именно моя точка, проголосуйте (проголосуйте за вас, чтобы не ошибиться :)) –

0

Использование @RequestBody аннотаций с @Valid аннотацию

public ModelAndView createCircle(@Valid @RequestBody Circle circle, BindingResult res) { 
+0

Это отлично работает для меня, а также в строке в файле весеннего контекста. –

1

Смотрите самое дно этой страницы:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html

Добавьте следующий к вам весной конфигурации:

<!-- JSR-303/JSR-349 support will be detected on classpath and enabled automatically --> 
    <mvc:annotation-driven/> 
+0

спасибо, но он все еще не работает: SI считает, что работает так же. – Adrien

+0

относится к транзакциям и не имеет ничего общего с этим , Как указано в другом ответе, убедитесь, что у вас есть поставщик проверки подлинности в пути к классам. –

+0

Да, правда, я забыл, почему у меня был этот tx: annotation-driven ^^ – Adrien

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