Académique Documents
Professionnel Documents
Culture Documents
TP n°5
Matière : Spring Boot
Classe : GLSI 2
Enseignant : Mohamed Anouar DAHDEH
Objectifs :
Création de Template avec Thymeleaf
Utilisation des formulaires
Introduction
Dans la première partie de ce TP, vous allez suivre un tutoriel sur l’utilisation des formulaires
avec Thymeleaf. Par la suite, dans la deuxième partie, vous allez compléter votre travail du TP4
en y ajoutant des autres fonctionnalités.
Partie 1 :
L’application que vous allez développer, consiste à créer des simples interfaces web pour gérer
une liste de personnes (Création et consultation).
1
Département informatique
Le workflow du traitement des requêtes POST :
Contrôleur Vue
Travail à faire :
1- Créer une nouvelle application Spring Boot
- Name: TutoTP5
- Group: com.fsb
- Artifact: TutoTP5App
- Description: Spring Boot and Thymeleaf Tuto
- Package: com.fsb.tutotp5
- Starters : web, thymeleaf et devTools
2- Créer 3 fichiers et les placer dans le répertoire src/main/resources/templates :
index.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>Welcome</title>
<link rel="stylesheet" type="text/css" th:href="@{/css/style.css}"/>
</head>
<body>
<h1>Welcome</h1>
<h2 th:text="${message}">..!..</h2>
<a th:href="@{/personList}">Person List</a>
</body>
</html>
2
Département informatique
personList.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>Person List</title>
<link rel="stylesheet" type="text/css" th:href="@{/css/style.css}"/>
</head>
<body>
<h1>Person List</h1>
<a href="addPerson">Add Person</a>
<br/><br/>
<div>
<table border="1">
<tr>
<th>id</th>
<th>First Name</th>
<th>Last Name</th>
</tr>
<tr th:each ="person : ${persons}">
<td th:text="${person.id}">...</td>
<td th:text="${person.firstName}">...</td>
<td th:text="${person.lastName}">...</td>
</tr>
</table>
</div>
</body>
</html>
addPerson.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>Add Person</title>
<link rel="stylesheet" type="text/css" th:href="@{/css/style.css}"/>
</head>
<body>
<h1>Create a Person:</h1>
<form th:action="@{/addPerson}"
th:object="${personForm}" method="POST">
First Name:
<input type="text" th:field="*{firstName}" />
<br/>
Last Name:
<input type="text" th:field="*{lastName}" />
<br/>
<input type="submit" value="Create" />
</form>
<br/>
<!-- Check if errorMessage is not null and not empty -->
<div th:if="${errorMessage}" th:text="${errorMessage}"
style="color:red;font-style:italic;">
...
</div>
</body>
</html>
3
Département informatique
Remarques :
Avec l’attribut th:object on peut utiliser le java bean personForm en tant qu’objet courant du
formulaire. Cet objet est créé dans le formulaire et sera envoyer au contrôleur après clique sur le bouton
submit.
th:field permet de lier la valeur d’un élément html à une propriété d’un java bean. La ligne suivante :
est equivalente à
Pour les ressources statiques (Static Resource), par exemple : des fichiers css, javascript,
image,... vous devez les placer dans le dossier src/main/resources/static ou dans ses sous-
dossiers.
style.css
@charset "ISO-8859-1";
h1 {
color:#0000FF;
}
h2 {
color:#FF0000;
}
table {
border-collapse: collapse;
}
table th, table td {
padding: 5px;
}
application.properties
spring.thymeleaf.cache=false
welcome.message=Hello Thymeleaf
error.message=First Name & Last Name is required!
4
Département informatique
4- Model, Form, Controller classes
Person.java
public Person() {
PersonForm.java
La classe PersonForm représentent des données du formulaire lorsque vous créez une
nouvelle Personne sur la page addPerson.
PersonController.java
PersonController est une classe Contrôleur. Elle traite les demandes d'un utilisateur et contrôle le
flux de l'application.
5
Département informatique
@Controller
public class PersonController {
private static List<Person> persons = new ArrayList<Person>();
private static Long idCount =0L;
static {
persons.add(new Person(++idCount,"Bill", "Gates"));
persons.add(new Person(++idCount,"Steve", "Jobs"));
}
// Injectez via application.properties.
@Value("${welcome.message}")
private String message;
@Value("${error.message}")
private String errorMessage;
model.addAttribute("message", message);
return "index";
}
@RequestMapping(value = { "/personList" }, method = RequestMethod.GET)
public String personList(Model model) {
model.addAttribute("persons", persons);
return "personList";
}
@RequestMapping(value = { "/addPerson" }, method = RequestMethod.GET)
public String showAddPersonPage(Model model) {
6
Département informatique
Consignes :
PersonForm est construit avec le constructeur par défaut ensuite les attributs du
modèle sont initialisés avec les paramètres du POST. Le résultat final fera partie
du modèle produit par l'action.
Partie 2 :
1- En se basant sur le tutoriel de la partie 1, vous allez compléter votre travail du tp4 par des
interfaces d’ajout, de modification et de suppression d’un produit.
2- Ajouter la validation des formulaires.
3- Améliorer les interfaces de votre application web avec un Framework CSS comme Bootstrap,
vous pouvez utiliser Bootswatch (un générateur de Template Bootstap)
Bon Travail