Spring 3 MVC и JSR303 @ Действительный пример

Spring 3 MVC и JSR303 @ Valid пример

В Spring 3 вы можете включить «http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-annotation-driven[mvc:annotation-driven] ”Для поддержкиJSR303 bean validation с помощью аннотации@Valid, если в пути к классам есть среда валидатора JSR 303.

Note
Hibernate Validator - эталонная реализация для JSR 303

В этом руководстве мы покажем вам, как интегрировать валидатор Hibernate с Spring MVC через аннотацию@Valid, чтобы выполнить проверку bean-компонента в форме HTML.

Используемые технологии:

  1. Весна 3.0.5. ВЫПУСК

  2. Hibernate Validator 4.2.0.Final

  3. JDK 1.6

  4. Затмение 3.6

  5. Maven 3

1. Зависимости проекта

Валидатор Hibernate доступен в общедоступном репозитории JBoss.

    
        
            JBoss repository
            http://repository.jboss.org/nexus/content/groups/public/
        
    

    
        3.0.5.RELEASE
    

    

        
        
            org.springframework
            spring-core
            ${spring.version}
        

        
            org.springframework
            spring-web
            ${spring.version}
        

        
            org.springframework
            spring-webmvc
            ${spring.version}
        

        
        
            org.hibernate
            hibernate-validator
            4.2.0.Final
        

    

2. JSR303 Bean Validation

Простой POJO, аннотированный с помощью аннотации валидатора Hibernate.

Note
Обратитесь к этомуHibernate validator documentation для подробного объяснения

package com.example.common.model;

import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;

public class Customer {

    @NotEmpty //make sure name is not empty
    String name;

    @Range(min = 1, max = 150) //age need between 1 and 150
    int age;

    //getter and setter methods

}

3. Контроллер + @Valid

Чтобы проверка работала, просто аннотируйте «объект модели с аннотациями JSR» через@Valid. Вот и все, остальное - обычная обработка форм Spring MVC.

package com.example.common.controller;

import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.example.common.model.Customer;

@Controller
@RequestMapping("/customer")
public class SignUpController {

    @RequestMapping(value = "/signup", method = RequestMethod.POST)
    public String addCustomer(@Valid Customer customer, BindingResult result) {

        if (result.hasErrors()) {
            return "SignUpForm";
        } else {
            return "Done";
        }

    }

    @RequestMapping(method = RequestMethod.GET)
    public String displayCustomerForm(ModelMap model) {

        model.addAttribute("customer", new Customer());
        return "SignUpForm";

    }

}

4. Сообщение об ошибке

По умолчанию, если проверка не удалась.

  1. @NotEmpty отобразит «не может быть пустым»

  2. @Range отобразит «должно быть от 1 до 150».

Вы можете легко переопределить его, создать свойства с помощью «ключа» и сообщения. Чтобы узнать, какая @annotation привязана к какому ключу, просто отладьте ее и просмотрите значение внутри «BindingResult result». Обычно это «@Annotation Name.object.fieldname».

Файл: messages.properties

NotEmpty.customer.name = Name is required!
Range.customer.age = Age value must be between 1 and 150

5. MVC: аннотация привод

Включите «mvc:annotation-driven», чтобы Spring MVC поддерживал валидатор JSR303 через@Valid, а также привяжите ваш файл свойств.



    

         
    

    
        
            /WEB-INF/pages/
        
        
            .jsp
        
    

        
    
        
    

6. Страницы JSP

Последняя, ​​обычная страница JSP с библиотекой тегов Spring.

Файл: SignUpForm.jsp

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>






    

Customer SignUp Form - JSR303 @Valid example

Customer Name :
Customer Age :

Файл: Done.jsp



    

Done

6. Demo

URL : http://localhost:8080/SpringMVC/customer - Страница формы клиента с 2 текстовыми полями для имени и возраста.

Spring MVC JSR303 demo page

URL : http://localhost:8080/SpringMVC/customer/signup - Если вы не заполнили форму и не нажали кнопку «Отправить», отобразятся настроенные вами сообщения об ошибках проверки.

Spring MVC JSR303 demo page - error message

Скачать исходный код