Formulaire HTML — 3 Méthodes de Liaison de Paramètres en Spring MVC

En Spring MVC, il existe trois approches pour lier les données d'un formulaire HTML aux paramètres d'un contrôleur. L'attribut name des champs doit correspondre soit au nom du paramètre, soit à la propriété d'un bean Java.

Première méthode : Transmission de types primitifs

Pour les paramètres simples, l'attribut name correspond directement au nom du paramètre dans la signature de la méthode.

<form id="formulaireEdition" action="api/traite/destination" method="POST">
    <div>
        Libellé <input id="inputLibelle" name="libelleParam" />
    </div>
    <div>
        Identifiant <input id="inputIdentifiant" name="idParam" />
    </div>
    <input type="submit" value="Envoyer" />
</form>
@ResponseBody
@RequestMapping(value = "api/traite/destination", method = RequestMethod.POST)
public void traiterDestination(Long idParam, String libelleParam) {
    // Traitement des paramètres
}

Deuxième méthode : Utilisation d'un bean personnalisé

Lorsqu'un bean Java est utilisé comme paramètre, les noms des champs du formulaire doivent correspondre aux propriétés de ce bean.

public class Categorie {
    private int identifiant;
    private String libelle;
    // Getters et setters
}
<form id="formulaireEdition" action="api/traite/destination" method="POST">
    <div>
        Identifiant <input id="inputId" name="identifiant" />
    </div>
    <div>
        Libellé <input id="inputLib" name="libelle" />
    </div>
    <input type="submit" value="Envoyer" />
</form>
@ResponseBody
@RequestMapping(value = "api/traite/destination", method = RequestMethod.POST)
public void traiterDestination(Categorie categorie) {
    // Traitement de l'objet
}

Troisième méthode : Bean avec propriété imbriquée

Pour un bean contenant un autre bean comme attribut, utilisez la notation pointée dans l'attribut name pour accéder aux propriétés internes.

public class Individu {
    private String nom;
    private int age;
    private int genre;
    private Categorie categorie;
    // Getters et setters
}
<form id="formulaireEdition" action="api/traite/destination" method="POST">
    <div>
        <input name="nom" value="Jean" />
    </div>
    <div>
        <input name="age" value="30" />
    </div>
    <div>
        <select name="genre">
            <option value="0">Homme</option>
            <option value="1">Femme</option>
        </select>
    </div>
    <div>
        <input name="categorie.identifiant" value="10" />
    </div>
    <div>
        <input name="categorie.libelle" value="Travail" />
    </div>
    <input type="submit" value="Envoyer" />
</form>
@ResponseBody
@RequestMapping(value = "api/traite/destination", method = RequestMethod.POST)
public void traiterDestination(Individu individu) {
    // Traitement de l'objet avec sous-objet
}

Dans le cas des requêtes AJAX, l'annotation @ResponseBody n'est pas nécessaire si la méthode retourne une vue. Sinon, elle doit être ajoutée que la méthode ait une valeur de retour ou non.

Étiquettes: Spring MVC HTML Forms Java Beans Data Binding

Publié le 30 juin à 17h55