Spring 3 MVC et JSR303 Exemple @Valid

Exemple Spring 3 MVC et JSR303 @Valid

Au printemps 3, vous pouvez activer «http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-annotation-driven[mvc:annotation-driven] ”Pour prendre en chargeJSR303 bean validation via l'annotation@Valid, s'il y a un framework de validation JSR 303 sur le chemin de classe.

Note
Hibernate Validator est l'implémentation de référence pour JSR 303

Dans ce tutoriel, nous vous montrons comment intégrer le validateur Hibernate à Spring MVC, via l'annotation@Valid, pour effectuer une validation de bean dans un formulaire HTML.

Technologies utilisées:

  1. Spring 3.0.5.RELEASE

  2. Hibernate Validator 4.2.0.Final

  3. JDK 1.6

  4. Eclipse 3.6

  5. Maven 3

1. Dépendances du projet

Le validateur Hibernate est disponible dans le référentiel public 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. Validation du bean JSR303

Un POJO simple, annoté avec l'annotation du validateur Hibernate.

Note
Reportez-vous à ceHibernate validator documentation pour une explication détaillée

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. Controller + @Valid

Pour que la validation fonctionne, annotez simplement «l'objet modèle annoté JSR» via@Valid. C’est tout, d’autres choses ne sont qu’une gestion normale des formulaires 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. Message d'erreur

Par défaut, si la validation a échoué.

  1. @NotEmpty affichera «peut-être pas vide»

  2. @Range affichera «doit être compris entre 1 et 150»

Vous pouvez le remplacer facilement, créer des propriétés avec «clé» et message. Pour savoir quelle @annotation se lie à quelle clé, il suffit de la déboguer et d'afficher la valeur à l'intérieur de «BindingResult result». Normalement, la clé est «@Annotation Name.object.fieldname».

Fichier: messages.properties

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

5. mvc: piloté par annotation

Activez «mvc:annotation-driven» pour que Spring MVC prenne en charge le validateur JSR303 via@Valid, et liez également votre fichier de propriétés.



    

         
    

    
        
            /WEB-INF/pages/
        
        
            .jsp
        
    

        
    
        
    

6. Pages JSP

Dernière page, page JSP normale avec bibliothèque de balises de formulaire Spring.

Fichier: SignUpForm.jsp

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






    

Customer SignUp Form - JSR303 @Valid example

Customer Name :
Customer Age :

Fichier: Done.jsp



    

Done

6. Demo

URL : http://localhost:8080/SpringMVC/customer - Page de formulaire client, avec 2 zones de texte pour le nom et l'âge.

Spring MVC JSR303 demo page

URL : http://localhost:8080/SpringMVC/customer/signup - Si vous n’avez pas rempli le formulaire et cliquez sur le bouton «Soumettre», vos messages d’erreur de validation personnalisés seront affichés.

Spring MVC JSR303 demo page - error message

Télécharger le code source