TD3 - Spring Film
Introduction : Routage, controllers, services, entities, views
1. Architecture Générale
2. Fonctionnalités à implémenter
Routes à créer
| Méthode | Route | Action | Vue retournée | 
|---|---|---|---|
| GET | / | Page d'accueil | index.html | 
| GET | /films | Liste tous les films | liste.html | 
| GET | /films/nouveau | Affiche formulaire ajout | formulaire.html | 
| POST | /films | Enregistre un nouveau film | Redirection → /films | 
| GET | /films/{id} | Détail d'un film | detail.html | 
| POST | /films/{id}/supprimer | Supprime un film | Redirection → /films | 
3. Modèle de données
Classe Film
Attributs :
- id: Long (identifiant unique)
- titre: String (obligatoire)
- realisateur: String
- annee: Integer (entre 1900 et 2100)
- note: Integer (entre 1 et 5)
Méthodes :
- Constructeur vide
- Constructeur avec tous les paramètres
- Getters et setters pour tous les attributs
4. Service FilmService
Annotation : @Service
Attributs :
- films:- List<Film>(stockage en mémoire)
- nextId:- Long(compteur pour générer les IDs)
Constructeur :
Initialiser la liste avec 3-4 films de démo Exemples : - Inception, Nolan, 2010, note 5 - Matrix, Wachowski, 1999, note 5 - Pulp Fiction, Tarantino, 1994, note 5
Méthodes :
findAll() : List<Film>
- Retourne tous les films
findById(Long id) : Film
- Recherche un film par son ID
- Retournenullsi non trouvé
save(Film film) : void
- Sifilm.id == null→ nouveau film → assignernextId++
- Sinon → mise à jour → chercher et remplacer le film existant
- Ajouter à la liste
deleteById(Long id) : void
- Supprimer le film de la liste
- Utiliserfilms.removeIf(f → f.getId().equals(id))
5. Contrôleur FilmController
Annotation : @Controller
Injection de dépendance :
@Autowired private FilmService filmService;
Méthodes à implémenter :
@GetMapping("/")
Méthode : home() Retour : "index"
@GetMapping("/films")
Méthode : liste(Model model)
- Récupérer tous les films via le service
- Ajouter au modèle : model.addAttribute("films", ...)
Retour : "liste"
@GetMapping("/films/nouveau")
Méthode : formulaireAjout(Model model)
- Créer un film vide
- Ajouter au modèle : model.addAttribute("film", new Film())
Retour : "formulaire"
@PostMapping("/films")
Méthode : ajouterFilm(@ModelAttribute Film film) - Sauvegarder via le service - Redirection : "redirect:/films"
@GetMapping("/films/{id}")
Méthode : detail(@PathVariable Long id, Model model) - Récupérer le film par ID - Ajouter au modèle Retour : "detail"
@PostMapping("/films/{id}/supprimer")
Méthode : supprimer(@PathVariable Long id) - Supprimer via le service - Redirection : "redirect:/films"
6. Vues Mustache
index.html
Contenu :
- Titre “Bienvenue sur le gestionnaire de films”
- Lien vers/films(“Voir tous les films”)
liste.html
Contenu :
- Titre “Liste des films”
- Tableau avec colonnes : Titre, Réalisateur, Année, Note, Actions
- Boucle{{#films}}pour afficher chaque film
- Pour chaque film :- Lien “Détail” →/films/{{id}}
- Formulaire POST “Supprimer” →/films/{{id}}/supprimer
 
- Bouton “Ajouter un film” →/films/nouveau
formulaire.html
Contenu :
- Titre “Ajouter un film”
- Formulaire POST vers/films
- Champs :- titre(text, required)
- realisateur(text)
- annee(number)
- note(number, min=1, max=5)
 
- Boutons : Submit “Enregistrer”, Lien “Annuler” →/films
detail.html
Contenu :
- Titre du film{{titre}}
- Affichage :- Réalisateur :{{realisateur}}
- Année :{{annee}}
- Note :{{note}}/5
 
- Lien “Retour à la liste” →/films
- Formulaire POST “Supprimer ce film” →/films/{{id}}/supprimer
7. Configuration
application.properties
# Port du serveur (optionnel) server.port=8080 #Mustache configuration spring.mustache.charset=UTF-8 spring.mustache.prefix=classpath:/templates/ spring.mustache.suffix=.html
8. Dod
Fonctionnel :
- Affichage de la liste des films
- Ajout d'un nouveau film
- Détail d'un film
- Suppression d'un film
- Navigation fluide entre les pages
Architecture :
- Séparation Contrôleur / Service / Modèle
- Utilisation correcte des annotations Spring
- Templates Mustache bien structurés
Bonus :
- Validation des champs du formulaire
- Messages de confirmation
- Gestion d'erreur si film introuvable
 jcheron
 jcheron