Spring MVC - Exemple de validation Hibernate

L'exemple suivant montre comment utiliser la gestion des erreurs et les validateurs dans les formulaires à l'aide du framework Spring Web MVC. Pour commencer, ayons en place un IDE Eclipse fonctionnel et respectons les étapes suivantes pour développer une application Web basée sur un formulaire dynamique à l'aide de Spring Web Framework.

Étape La description
1 Créer un projet avec le nom TestWeb sous un package com.tutorialspoint comme expliqué dans le chapitre Spring MVC - Hello World.
2 Créez les classes Java Student, StudentController et StudentValidator sous le package com.tutorialspoint.
3 Créez des fichiers de vue addStudent.jsp et result.jsp dans le sous-dossier jsp.
4 Télécharger la bibliothèque Hibernate Validator Hibernate Validator . Extrayez hibernate-validator-5.3.4.Final.jar et les dépendances requises présentes dans le dossier requis du fichier zip téléchargé. Mettez-les dans votre CLASSPATH.
5 Créez un fichier de propriétés messages.properties dans le dossier SRC.
6 La dernière étape consiste à créer le contenu des fichiers source et de configuration et d'exporter l'application comme expliqué ci-dessous.

Student.java

package com.tutorialspoint;

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

public class Student {

   @Range(min = 1, max = 150) 
   private Integer age;
   @NotEmpty
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }

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

   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

StudentController.java

package com.tutorialspoint;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class StudentController {

   @RequestMapping(value = "/addStudent", method = RequestMethod.GET)
   public ModelAndView student() {
      return new ModelAndView("addStudent", "command", new Student());
   }

   @ModelAttribute("student")
   public Student createStudentModel() {	
      return new Student();
   }

   @RequestMapping(value = "/addStudent", method = RequestMethod.POST)
   public String addStudent(@ModelAttribute("student") @Validated Student student, 
      BindingResult bindingResult, Model model) {
      if (bindingResult.hasErrors()) {
         return "addStudent";
      }
      model.addAttribute("name", student.getName());
      model.addAttribute("age", student.getAge());
      model.addAttribute("id", student.getId());

      return "result";
   }
}

messages.properties

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

Ici, la clé est <Annotation>. <object-name>. <attribute>. La valeur est le message à afficher.

TestWeb-servlet.xml

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:context = "http://www.springframework.org/schema/context"
   xmlns:mvc = "http://www.springframework.org/schema/mvc"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "
   http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd
   http://www.springframework.org/schema/mvc
   http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

   <context:component-scan base-package = "com.tutorialspoint" />
   <mvc:annotation-driven />
   <bean class = "org.springframework.context.support.ResourceBundleMessageSource"
      id = "messageSource">
      <property name = "basename" value = "messages" />
   </bean>
   <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name = "prefix" value = "/WEB-INF/jsp/" />
      <property name = "suffix" value = ".jsp" />      
   </bean>
</beans>

Ici, pour la première méthode de service student(), nous avons passé un blanc Studentobject>dans l'objet ModelAndView avec le nom "command", car le framework Spring attend un objet avec le nom "command", si vous utilisez des balises <form: form> dans votre fichier JSP. Alors, quand lestudent() méthode est appelée, elle retourne addStudent.jsp vue.

La deuxième méthode de service addStudent() sera appelé contre une méthode POST sur le HelloWeb/addStudentURL. Vous préparerez votre objet modèle en fonction des informations soumises. Enfin, une vue "résultat" sera renvoyée par la méthode de service, ce qui entraînera le rendu du result.jsp. Au cas où des erreurs seraient générées à l'aide du validateur, la même vue "addStudent" est renvoyée, Spring injecte automatiquement les messages d'erreur deBindingResult en vue.

addStudent.jsp

<%@taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
<html>
   <head>
      <title>Spring MVC Form Handling</title>
   </head>
   <style>
      .error {
         color: #ff0000;
      }

      .errorblock {
         color: #000;
         background-color: #ffEEEE;
         border: 3px solid #ff0000;
         padding: 8px;
         margin: 16px;
      }
   </style>
   <body>

      <h2>Student Information</h2>
      <form:form method = "POST" action = "/TestWeb/addStudent" commandName = "student">
      <form:errors path = "*" cssClass = "errorblock" element = "div" />
         <table>
            <tr>
               <td><form:label path = "name">Name</form:label></td>
               <td><form:input path = "name" /></td>
               <td><form:errors path = "name" cssClass = "error" /></td>
            </tr>
            <tr>
               <td><form:label path = "age">Age</form:label></td>
               <td><form:input path = "age" /></td>
               <td><form:errors path = "age" cssClass = "error" /></td>
            </tr>
            <tr>
               <td><form:label path = "id">id</form:label></td>
               <td><form:input path = "id" /></td>
               </tr>
            <tr>
               <td colspan = "2">
               <input type = "submit" value = "Submit"/>
               </td>
            </tr>
         </table>  
      </form:form>
   </body>
</html>

Ici, nous utilisons la balise <form: errors /> avec path = "*" pour afficher les messages d'erreur. Par exemple -

<form:errors path = "*" cssClass = "errorblock" element = "div" />

Il affichera des messages d'erreur pour toutes les validations d'entrée. Nous utilisons la balise <form: errors /> avec path = "name" pour afficher le message d'erreur pour le champ de nom.

Par exemple -

<form:errors path = "name" cssClass = "error" />
<form:errors path = "age" cssClass = "error" />

Il affichera des messages d'erreur pour les validations des champs de nom et d'âge.

result.jsp

<%@taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
<html>
   <head>
      <title>Spring MVC Form Handling</title>
   </head>
   <body>

      <h2>Submitted Student Information</h2>
      <table>
         <tr>
            <td>Name</td>
            <td>${name}</td>
         </tr>
         <tr>
            <td>Age</td>
            <td>${age}</td>
         </tr>
         <tr>
            <td>ID</td>
            <td>${id}</td>
         </tr>
      </table>  
   </body>
</html>

Une fois que vous avez terminé la création des fichiers source et de configuration, exportez votre application. Faites un clic droit sur votre application, utilisezExport → WAR File option et enregistrez le HelloWeb.war fichier dans le dossier webapps de Tomcat.

Maintenant, démarrez le serveur Tomcat et assurez-vous que vous pouvez accéder à d'autres pages Web à partir du dossier Webapps à l'aide d'un navigateur standard. Essayez une URL -http://localhost:8080/TestWeb/addStudent et nous verrons l'écran suivant, si vous avez entré des valeurs invalides.