Mise en route des formulaires dans Spring MVC

Mise en route des formulaires dans Spring MVC

1. Vue d'ensemble

Dans cet article, nous aborderons les formulaires Spring et la liaison de données à un contrôleur. Aussi, nous allons jeter un œil à l'une des principales annotations enSpring MVC i.e. @ModelAttribute.

Bien sûr, Spring MVC est un sujet complexe avec beaucoup de choses que vous devez comprendre pour l'utiliser à son plein potentiel, doncdefinitely dig deeper into the framework here.

Lectures complémentaires:

Exploration de la bibliothèque de balises de formulaire de SpringMVC

Un didacticiel rapide et pertinent sur les différentes balises fournies par Spring MVC pour nous aider à créer et à valider des formulaires.

Read more

Introduction à l'utilisation de FreeMarker dans Spring MVC

FreeMarker est un moteur de template basé sur Java de Apache Software Foundation. Ce tutoriel explique comment configurer FreeMarker pour une utilisation dans Spring MVC.

Read more

Introduction à l'utilisation de Thymeleaf au printemps

Thymeleaf est un langage de template avec une excellente intégration avec Spring. Cet article fournit une introduction à l'utilisation de Thymeleaf dans une application Spring MVC.

Read more

2. Le modèle

Tout d'abord, définissons lesa simple entity que nous allons afficher et lier au formulaire:

public class Employee {
    private String name;
    private long id;
    private String contactNumber;

    // standard getters and setters
}

Ce sera notre objet de soutien de formulaire.

3. La vue

Ensuite, définissonsthe actual form, et bien sûr, le fichier HTML qui le contient. Nous allons utiliser une page sur laquelle un nouvel employé est créé / enregistré:

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

    
    
    
        

Welcome, Enter The Employee Details

Name
Id
Contact Number

Tout d'abord, notez que nous incluons une bibliothèque de balises dans notre page JSP - le taglibform - pour vous aider à définir notre formulaire.

Ensuite - la balise<form:form> joue ici un rôle important; il est très similaire à la balise HTLM<form> standard, mais l’attributmodelAttribute est la clé qui spécifie un nom de l’objet modèle qui sous-tend ce formulaire:

Cela correspondra aux@ModelAttribute plus tard dans le contrôleur.

Ensuite - chaque champ de saisie utilise encore une autre balise utile du taglib Spring Form -form: prefix. Chacun de ces champs spécifiea path attribute - cela doit correspondre à un getter / setter de l'attribut de modèle (dans ce cas, la classe Employee). Lorsque la page est chargée, les champs de saisie sont renseignés par Spring, qui appelle le getter de chaque champ lié à un champ de saisie. Lorsque le formulaire est soumis, les auteurs sont appelés à enregistrer les valeurs du formulaire dans l'objet.

Enfin - lorsquethe form is submitted, le gestionnaire POST dans le contrôleur est appelé et le formulaire est automatiquement lié à l'argumentemployee que nous avons passé.

Basic Forms with Spring MVC

4. Le controlle

Voyons maintenant lesthe Controller qui vont gérer le back-end:

@Controller
public class EmployeeController {

    @RequestMapping(value = "/employee", method = RequestMethod.GET)
    public ModelAndView showForm() {
        return new ModelAndView("employeeHome", "employee", new Employee());
    }

    @RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
    public String submit(@Valid @ModelAttribute("employee")Employee employee,
      BindingResult result, ModelMap model) {
        if (result.hasErrors()) {
            return "error";
        }
        model.addAttribute("name", employee.getName());
        model.addAttribute("contactNumber", employee.getContactNumber());
        model.addAttribute("id", employee.getId());
        return "employeeView";
    }
}

Le contrôleur définit deux opérations simples - le GET pour afficher les données dans le formulaire et le POST pour l’opération de création, via la soumission du formulaire.

Notez également que si l'objet appelé "employee" n'est pas ajouté au modèle, Spring se plaindra lorsque nous essayons d'accéder au JSP car ce dernier sera configuré pour lier le formulaire à l'attribut de modèle "employee":

java.lang.IllegalStateException:
  Neither BindingResult nor plain target object
    for bean name 'employee' available as request attribute
  at o.s.w.s.s.BindStatus.(BindStatus.java:141)

Pour accéder à notre objet de support de formulaire, nous devons l'injecter via l'annotation@ModelAttribute.

Un `+ @ ModelAttribute +` sur un argument de méthode indique que l'argument sera extrait du modèle. S'il n'est pas présent dans le modèle, l'argument sera d'abord instancié puis ajouté au modèle.

5. Gestion des erreurs de liaison

Par défaut, Spring MVC lève une exception lorsque des erreurs se produisent lors de la liaison de la demande. Ce n’est généralement pas ce que nous voulons, mais nous devrions présenter ces erreurs à l’utilisateur. Nous allons utiliser unBindingResult en en ajoutant un comme argument à notre méthode de contrôleur:

public String submit(
  @Valid @ModelAttribute("employee") Employee employee,
  BindingResult result,
  ModelMap model)

L'argumentBindingResult doit être positionné juste après notre objet de support de formulaire - c'est l'un des rares cas où l'ordre des arguments de la méthode est important. Sinon, nous rencontrerons l'exception suivante:

java.lang.IllegalStateException:
  Errors/BindingResult argument declared without preceding model attribute.
    Check your handler method signature!

Maintenant - une exception n'est plus levée; à la place, des erreurs [.brush: .java; .gutter: .true] # sera enregistré sur lesBindingResult qui sont passés à la méthodesubmit. À ce stade, nous pouvons gérer ces erreurs de différentes manières - par exemple, l'opération peut être annulée: #

@RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
public String submit(@Valid @ModelAttribute("employee")Employee employee,
  BindingResult result,  ModelMap model) {
    if (result.hasErrors()) {
        return "error";
    }

    //Do Something
    return "employeeView";
}

Notez comment, au cas où le résultat contient des erreurs, nous renvoyons une autre vue à l'utilisateur afin d'afficher correctement ces erreurs. Jetons un œil à cette vue -error.jsp:


    
    

    
        

Please enter the correct details

Retry

6. Afficher un employé

Enfin, en plus de créer un nouvel employé, nous pouvons également simplement en afficher un - voici le code de visualisation rapide pour cela:


    

Submitted Employee Information

Name : ${name}
ID : ${id}
Contact Number : ${contactNumber}

La page JSP utilise simplement des expressions EL pour afficher les valeurs des propriétés de l'objet Employé dans le modèle.

7. Test de l'application

L'application simple peut être déployée - par exemple sur un serveur Tomcat - et accessible localement:

Voici la vue contenant le formulaire principal - avant l'opération de soumission:

Spring MVC Form example - Submit

Exemple de formulaire MVC Spring - Soumettre

Après l'envoi, les données sont affichées:

Spring MVC Form example - View

Spring MVC Form example - Voir

Et c’est tout -a working example of a simple form with Spring MVC, with validation.

L'implémentation de ce tutoriel Spring MVC peut être trouvée dansthe GitHub project - il s'agit d'un projet basé sur Maven, il devrait donc être facile à importer et à exécuter tel quel.

Enfin, comme je le disais au tout début de l'article, vous devriezdefinitely dig deeper into Spring MVC.