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.