0% ont trouvé ce document utile (0 vote)
34 vues44 pages

Cours Spring MVC Advanced

Transféré par

losus007
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
34 vues44 pages

Cours Spring MVC Advanced

Transféré par

losus007
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Spring MVC : formulaires et sessions

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

[Link]@[Link]

H & H: Research and Training 1 / 30


Plan

1 Formulaires
Récupérer les données d’un formulaire dans un objet
Valider les formulaires

2 Autres balises de formulaires Spring

3 Sessions

H & H: Research and Training 2 / 30


Formulaires

Spring MVC 5

Un formulaire
n’est pas un composant propre à Spring

H I ©
peut donc être défini comme on le faisait avant, avec HTML

E Lés de Spring afin de


peut être construit en respectant les spécificit
U
faciliter le contrôle de la saisie et la O
L M validation
r e f E
A ch
©

H & H: Research and Training 3 / 30


Formulaires

Spring MVC 5

Un formulaire
n’est pas un composant propre à Spring

H I ©
peut donc être défini comme on le faisait avant, avec HTML

E Lés de Spring afin de


peut être construit en respectant les spécificit
U
faciliter le contrôle de la saisie et la O
L M validation
r e f E
A c: h
©
L’apport de Spring

Facilite la récupération de données après la soumission d’un


formulaire sous forme d’un objet
Simplifie la validation de formulaires

H & H: Research and Training 3 / 30


Formulaires Récupérer les données d’un formulaire dans un objet

Spring MVC 5
Pour récupérer les données d’un formulaire dans un objet

On doit :

construire le formulaire en utilisant les balises Spring

H I ©
EL
utiliser l’annotation @ModelAttribute pour récupérer les données envoyées
par le formulaire sous forme d’objet
O U
f E LM
ch r e
©A

H & H: Research and Training 4 / 30


Formulaires Récupérer les données d’un formulaire dans un objet

Spring MVC 5
Pour récupérer les données d’un formulaire dans un objet

On doit :

construire le formulaire en utilisant les balises Spring

H I ©
EL
utiliser l’annotation @ModelAttribute pour récupérer les données envoyées
par le formulaire sous forme d’objet
O U
f E LM
Démarche
ch r e
On va : ©A
créer un contrôleur FormController

créer une vue [Link] et construire le formulaire en utilisant les


balises Spring

H & H: Research and Training 4 / 30


Formulaires Récupérer les données d’un formulaire dans un objet

Spring MVC 5
Le contrôleur FormController (première partie)

package [Link];

import [Link];
import
import
[Link];
[Link];
H I ©
import
U
[Link]; EL
import
O
[Link];
import
LM
[Link];
f E
ch r e
import [Link];

©A
import [Link];

@Controller
public class FormController {

@Autowired
private PersonneRepository personneRepository;

H & H: Research and Training 5 / 30


Formulaires Récupérer les données d’un formulaire dans un objet

Le contrôleur FormController (suite)

@GetMapping("/personne")
public String personneForm(Model model) {
[Link]("personne", new Personne());
return "personneForm";
}

@PostMapping("/personne")
public String personneSubmit(@ModelAttribute("personne") Personne
H I ©
personne, Model model) {
Personne p1 = [Link](personne);
U EL
O
LM
[Link]("personne", p1);

}
return "confirm";

r e f E
}
ch
©A

H & H: Research and Training 6 / 30


Formulaires Récupérer les données d’un formulaire dans un objet

Le contrôleur FormController (suite)

@GetMapping("/personne")
public String personneForm(Model model) {
[Link]("personne", new Personne());
return "personneForm";
}

@PostMapping("/personne")
public String personneSubmit(@ModelAttribute("personne") Personne
H I ©
personne, Model model) {
Personne p1 = [Link](personne);
U EL
O
LM
[Link]("personne", p1);

}
return "confirm";

r e f E
}
ch
Explication ©A
@ModelAttribute permet de récupérer les valeurs ajoutées au Model au
[Link]("personne", new Personne()); du get.

On peut initialiser nos champs en attribuant des valeurs aux attributs de l’objet personne
envoyé dans model

H & H: Research and Training 6 / 30


Formulaires Récupérer les données d’un formulaire dans un objet

Spring MVC 5

Pour utiliser les formulaires Spring (comme pour la JSTL)

on déclare un préfixe
on utilise les attributs de ce préfixe pour la construction et la
H I ©
EL
validation de formulaires

O U
f E LM
ch r e
©A

H & H: Research and Training 7 / 30


Formulaires Récupérer les données d’un formulaire dans un objet

Spring MVC 5

Pour utiliser les formulaires Spring (comme pour la JSTL)

on déclare un préfixe

H I ©
on utilise les attributs de ce préfixe pour la construction et la

EL
validation de formulaires

O U
Déclarer le préfixe
f E LM
ch r e
© A
<%@ taglib uri="[Link]
form" prefix="form" %>

H & H: Research and Training 7 / 30


Formulaires Récupérer les données d’un formulaire dans un objet

Spring MVC 5

Pour utiliser les formulaires Spring (comme pour la JSTL)

on déclare un préfixe

H I ©
on utilise les attributs de ce préfixe pour la construction et la

EL
validation de formulaires

O U
Déclarer le préfixe
f E LM
ch r e
© A
<%@ taglib uri="[Link]
form" prefix="form" %>

Utiliser le préfixe
<form:element [attributs]> ... </form:element>

H & H: Research and Training 7 / 30


Formulaires Récupérer les données d’un formulaire dans un objet

Spring MVC 5
Contenu du formulaire [Link]

<%@ taglib uri="[Link] prefix="form"


%>
<!DOCTYPE html>
<html>
<head>
H I ©
EL
<meta charset="UTF-8">
<title>Person form</title>
O U
LM
</head>
<body>
<h1>Person form</h1>
r e f E
ch
<form:form modelAttribute="personne" action="personne" method="post">

©A
<form:label path="nom">nom</form:label>
<form:input path="nom"/>
<form:label path="prenom">prénom</form:label>
<form:input path="prenom"/>
<input type="submit" value="Ajouter">
</form:form>
</body>
</html>

H & H: Research and Training 8 / 30


Formulaires Récupérer les données d’un formulaire dans un objet

Spring MVC 5
Explication
Les balises Spring (<form:x>) sont indispensables pour le
binding contrôleur/vue.
L’attribut modelAttribute="personne" du formulaire
H I ©
correspond à l’attribut @ModelAttribute du contrôleur.
U EL
O
f E LM
L’attribut path="..." doit correspondre à un getter/setter de
r e
l’attribut de modèle (ici la classe Personne). Lorsque le
ch
©A
formulaire est soumis, les setters seront utilisé pour enregistrer
les valeurs du formulaire dans l’objet personne.
Enfin, lorsque le formulaire est soumis, la méthode du contrôleur
annotée par @PostMapping est appelée et le formulaire affecte
automatiquement les valeurs du formulaire à l’attribut personne
du contrôleur.

H & H: Research and Training 9 / 30


Formulaires Valider les formulaires

Spring MVC 5

Pour contrôler la saisie avant d’insérer une personne dans la BD


On va : H I ©
U EL
O
ajouter le module de validation de Hibernate dans [Link]

f E LM
modifier l’entité Personne en rajoutant des contraintes exprimées
avec des annotations ch r e
©A
modifier la vue pour pouvoir afficher les messages d’erreur

H & H: Research and Training 10 / 30


Formulaires Valider les formulaires

Spring MVC 5

Ajoutons la dépendance suivante dans [Link]


<!-- [Link]
H I ©
[Link]/hibernate-validator -->
U EL
<dependency> O
E LM
<groupId>[Link]</groupId>
f
ch r e
<artifactId>hibernate-validator</artifactId>

©A
<version>[Link]</version>
</dependency>

H & H: Research and Training 11 / 30


Formulaires Valider les formulaires

Définissons nos règles de validation dans le modèle (l’entité)

package [Link];

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
H I ©
EL
import [Link];

@Entity
O U
public class Personne {
@Id
f E LM
ch r e
@GeneratedValue(strategy = [Link])

©A
private Long num;
@Size(min = 2)
@NotEmpty(message = "le champ nom est obligatoire")
private String nom;
@NotEmpty(message = "le champ prénom est obligatoire")
@Size(min = 2)
private String prenom;
...

H & H: Research and Training 12 / 30


Formulaires Valider les formulaires

Spring MVC 5

Les annotations de validation utilisées


H I ©
EL
@Size : pour indiquer la taille (le nombre de caractère) min et/ou
OU
max d’un champ (on peut aussi utiliser @Min et @Max)
M
f
@NotEmpty : pour préciserE L champ ne peut pas être vide (à
qu’un
e
c r @NotNull qui concerne plutôt le champ
ne pas confondrehavec
© A
d’une table et non pas d’un formulaire) )

H & H: Research and Training 13 / 30


Formulaires Valider les formulaires

Autres annotations

@Email : vérifie si la valeur est une adresse email valide

@Positive et @PositiveOrZero : vérifie si un champ est positif (ou resp. positif ou


null) (Réciproquement pour @Negative et @NegativeOrZero )

@Past : vérifie si une date est dans le passé (Pareillement pour @Future,
@FutureOrPresent et @PastOrPresent )
H I ©
EL
@Digits(integer=..., fraction=...) : vérifie si les partie entière et décimale
U
d’un nombre respectent la précision
O
E LM
@AssertTrue : vérifie si la valeur d’un champ est true (réciproquement pour
f
@AssertFalse)

ch r e
©A
@Max(value=) : vérifie si la valeur (nombre ou chaı̂ne de caractères représentant un
nombre) est inférieure ou égale à max (réciproquement @Min(value=))

Length(min=, max=) : vérifie si la longueur de la chaı̂ne de caractères est dans


l’intervalle

@ISBN, @Pattern... (consultez les autres sur


[Link]
/en-US/html single/#section-validating-bean-constraints)

H & H: Research and Training 14 / 30


Formulaires Valider les formulaires

Ajoutons les champs d’erreurs dans [Link]


<%@ taglib uri="[Link] prefix="form"
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
.error { color: red; }
H I ©
EL
</style>
<title>Person form</title>
</head>
O U
<body>
<h1>Person form</h1>
f E LM
r e
<form:form modelAttribute="personne" action="personne" method="post">
ch
©A
<form:label path="nom">nom</form:label>
<form:input path="nom"/>
<form:errors path="nom" cssClass="error"/>
<form:label path="prenom">prénom</form:label>
<form:input path="prenom"/>
<form:errors path="prenom" cssClass="error"/>
<input type="submit" value="Ajouter">
</form:form>
</body>
</html>
H & H: Research and Training 15 / 30
Formulaires Valider les formulaires

Spring MVC 5

Comment tester la validité de ce qui a été saisie par rapport à ce qui a été défini
(Personne)

@PostMapping("/personne")
public String personneSubmit(@ModelAttribute("personne") @Valid
Personne personne, BindingResult result, Model model) {
H I ©
U EL
if ([Link]()) {
O
}
return "personneForm";

f E LM
ch r e
Personne p1 = [Link](personne);

©A
[Link]("personne",p1);
return "confirm";
}
@Valid permet de valider les valeurs saisies par rapport à ce qui a été défini dans le
modèle.
Pour le binding, il faut placer le BindingResult result juste après le modèle.

H & H: Research and Training 16 / 30


Autres balises de formulaires Spring

Spring MVC 5

Considérons la méthode suivante définie dans FormController

@GetMapping("/form")
H I ©
EL
public String showView(Model model) {

O U
LM
[Link]("sexe", "");
[Link]("message", "Hello World!");

e f E
[Link]("genre", new String [] {"homme", "femme"});
r
ch
[Link]("personnes", [Link]());

©A
return "formSpring";
}

H & H: Research and Training 17 / 30


Autres balises de formulaires Spring

Spring MVC 5

Dans la vue formSpring, pour créer des boutons radios


homme : <form:radiobutton path="genre" value="homme"/>
femme : <form:radiobutton path="genre" value="femme"/>
H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 18 / 30


Autres balises de formulaires Spring

Spring MVC 5

Dans la vue formSpring, pour créer des boutons radios


homme : <form:radiobutton path="genre" value="homme"/>
femme : <form:radiobutton path="genre" value="femme"/>
H I ©
EL
M OU
E L envoyées par le contrôleur
On peut aussi récupérer les valeurs
f
<form:radiobuttons r e
chitems="${ genre }" path="sexe" />
© A

H & H: Research and Training 18 / 30


Autres balises de formulaires Spring

Spring MVC 5

Dans la vue formSpring, pour créer des boutons radios


homme : <form:radiobutton path="genre" value="homme"/>
femme : <form:radiobutton path="genre" value="femme"/>
H I ©
EL
M OU
E L envoyées par le contrôleur
On peut aussi récupérer les valeurs
f
<form:radiobuttons r e
chitems="${ genre }" path="sexe" />
© A
Ne pas confondre radiobutton et radiobuttons

H & H: Research and Training 18 / 30


Autres balises de formulaires Spring

Spring MVC 5

Pour créer des cases à cocher


homme : <form:checkbox path="genre" value="homme"/>
femme : <form:checkbox path="genre" value="femme"/>
H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 19 / 30


Autres balises de formulaires Spring

Spring MVC 5

Pour créer des cases à cocher


homme : <form:checkbox path="genre" value="homme"/>
femme : <form:checkbox path="genre" value="femme"/>
H I ©
EL
M OU
E L envoyées par le contrôleur
On peut aussi récupérer les valeurs
f
hr
<form:checkboxescitems="${
e genre }" path="sexe" />
© A

H & H: Research and Training 19 / 30


Autres balises de formulaires Spring

Spring MVC 5

Pour créer des cases à cocher


homme : <form:checkbox path="genre" value="homme"/>
femme : <form:checkbox path="genre" value="femme"/>
H I ©
EL
M OU
E L envoyées par le contrôleur
On peut aussi récupérer les valeurs
f
hr
<form:checkboxescitems="${
e genre }" path="sexe" />
© A
Ne pas confondre checkbox et checkboxes

H & H: Research and Training 19 / 30


Autres balises de formulaires Spring

Spring MVC 5
Pour créer des listes déroulantes
<form:select path="personnes">
<form:option value="-" label="--Choisir une personne
--"/>
<form:options items="${ personnes }" />
H I ©
EL
</form:select>

O U
f E LM
ch r e
©A

H & H: Research and Training 20 / 30


Autres balises de formulaires Spring

Spring MVC 5
Pour créer des listes déroulantes
<form:select path="personnes">
<form:option value="-" label="--Choisir une personne
--"/>
<form:options items="${ personnes }" />
H I ©
EL
</form:select>

O U
f E LM
ch r e
Pour créer des listes déroulantes avec sélection multiple

© A
<form:select path="personnes"
multiple="true" />
items="${ personnes }"

H & H: Research and Training 20 / 30


Autres balises de formulaires Spring

Spring MVC 5
Pour créer des listes déroulantes
<form:select path="personnes">
<form:option value="-" label="--Choisir une personne
--"/>
<form:options items="${ personnes }" />
H I ©
EL
</form:select>

O U
f E LM
ch r e
Pour créer des listes déroulantes avec sélection multiple

© A
<form:select path="personnes"
multiple="true" />
items="${ personnes }"

Pour consulter la liste des balises et d’attributs, aller sur


[Link]
/spring-framework-reference/html/[Link]
H & H: Research and Training 20 / 30
Sessions

Spring MVC 5

Les sessions avec Spring


H I ©
UEL
on peut les utiliser via l’objet WebRequest (comme
O
HttpSession de la plateforme JEE)
f E LM
ch r e
mais on peut les utiliser aussi via les annotations
©A

H & H: Research and Training 21 / 30


Sessions

Les sessions

Pour récupérer le WebRequest


@PostMapping("/connect")
H I ©
public String ourMethod(..., WebRequest request) {
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 22 / 30


Sessions

Les sessions

Pour récupérer le WebRequest


@PostMapping("/connect")
H I ©
public String ourMethod(..., WebRequest request) {
UEL
O
f E LM
ch r e
Pour enregistrer une donnée dans une session

©A
[Link]("perso", personne,WebRequest.
SCOPE_SESSION);

H & H: Research and Training 22 / 30


Sessions

Les sessions

Pour récupérer la donnée d’une session (dans un contrôleur)


[Link]("perso",WebRequest.
SCOPE_SESSION);

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 23 / 30


Sessions

Les sessions

Pour récupérer la donnée d’une session (dans un contrôleur)


[Link]("perso",WebRequest.
SCOPE_SESSION);

H I ©
UEL
O
Pour récupérer une donnée d’une session (dans une vue)

f E LM
${ [Link] }
ch r e
©A

H & H: Research and Training 23 / 30


Sessions

Les sessions

Pour récupérer la donnée d’une session (dans un contrôleur)


[Link]("perso",WebRequest.
SCOPE_SESSION);

H I ©
UEL
O
Pour récupérer une donnée d’une session (dans une vue)

f E LM
${ [Link] }
ch r e
©A
Pour supprimer une variable session
[Link]("perso", WebRequest.
SCOPE_SESSION);

H & H: Research and Training 23 / 30


Sessions

Spring MVC 5

Avec les annotations


H I ©
U EL
on peut aussi annoter la classe par @SessionAttributes en
précisant le nom d’une variable qui O
L M sera ajoutée à une session
r e
cette variable doit être f E être annotée par
également
A
ModelAttribute ch
©

H & H: Research and Training 24 / 30


Sessions

Spring MVC 5

Exemple
@Controller
@SessionAttributes("perso")
public class ConnectionController {
H I ©
UEL
@Autowired O
E LM
private PersonneRepository personneRepository;
f
ch r e
public ©
A
@GetMapping("/connect")
String personneForm(Model model) {
[Link]("perso", new Personne());
return "connectForm";
}

H & H: Research and Training 25 / 30


Sessions

Spring MVC 5
Exemple (suite)

@PostMapping("/connect")
public String checkData(@ModelAttribute("perso") Personne personne,
BindingResult result, Model model, WebRequest request) {
List <Personne> personnes = [Link](
[Link](), [Link]());
H I ©
EL
if ([Link]() > 0) {

U
[Link]("connected", true, WebRequest.SCOPE_SESSION)
O
LM
;
return "redirect:personne";
}
r e f E
ch
return "connectForm";

©A
}

@GetMapping("/deconnect")
public String leave(WebRequest request) {
[Link]("connected", false, WebRequest.SCOPE_SESSION);
[Link]("perso", WebRequest.SCOPE_SESSION);
return "redirect:connect";
}

H & H: Research and Training 26 / 30


Sessions

Spring MVC 5

Remarque
H I ©
EL
L’objet perso récupéré du formulaire sera ajouté comme une
variable session
M OU
E
Pour bien vérifier l’ajoutf de L perso dans la session, on peut
l’objet
c
par exemple ajouter e
hr${ [Link] } dans le body de
© A
personneForm.

H & H: Research and Training 27 / 30


Sessions

Spring MVC 5
Contenu du [Link]
<%@ taglib uri="[Link]
prefix="form" %>
<!DOCTYPE html>
<html>
<head>
H I ©
<meta charset="UTF-8">
UEL
<title>Connection Form</title>
O
</head>
<body>
f E LM
ch r e
<form:form modelAttribute="perso" action="connect" method="

©A
post">
<form:label path="nom">nom</form:label>
<form:input path="nom"/>
<form:label path="prenom">prénom</form:label>
<form:input path="prenom"/>
<input type="submit" value="Connexion">
</form:form>
</body>
</html>
H & H: Research and Training 28 / 30
Sessions

Spring MVC 5

Utilisons les sessions en modifiant le body de [Link]

<body>
Bonjour ${ [Link] }
<h1>Person form</h1>
H I ©
EL
<form:form modelAttribute="personne" action="personne" method="post">
<form:label path="nom">nom</form:label>
O U
LM
<form:input path="nom"/>
<form:errors path="nom" cssClass ="error"/>

e f E
<form:label path="prenom">prénom</form:label>
r
ch
<form:input path="prenom"/>

©A
<form:errors path="prenom" cssClass ="error"/>
<input type="submit" value="Ajouter">
</form:form>
<a href="deconnect" > déconnexion </a>
</body>

H & H: Research and Training 29 / 30


Sessions

Spring MVC 5

Ne pas confondre @SessionAttributes et @SessionAttribute


@SessionAttribute permet l’utilisation d’une variable session dans
une méthode de contrôleur
H I ©
UEL
O
Exemple
f E LM
@GetMapping("/info")
ch r e
©A
public String editPersonSession(@SessionAttribute("
perso") Personne personne) {
...
[Link]("Denzel")
...

H & H: Research and Training 30 / 30

Vous aimerez peut-être aussi