Spring MVC:Modifier un Utilisateur

Les étapes à suivre

  1. 1Créer la méthode modifier() Mappé par GET récupérer l'utilisateur dont l'id est passé en paramètre de la table utilisateur puis l'envoyer à la vue utilisateurs/modifier.jsp pour modifier ses informations
  2. 2Créer la vue utilisateurs/modifier.jsp permettant d'afficher les information de l'utilisateur envoyé par la méthode modifier() afin de les modifiées
  3. 3Créer la méthode modifier() Mappé par POST permettant de récupérer les information modifié puis insérer l'utilisateur dans la table utilisateur

1.Créer la méthode modifier() dans le controlleur UtilisateurController.java

/*objet utilisateur permet de stocker l'état initiale de l'utilisateur à modifier */
Utilisateur utilisateurAmodifier=new Utilisateur();
/* recuppérer les données actuelles d'un utilisateur dont id est passé en paramètres */
@RequestMapping("/{id}/modifier")
public String modifier(@PathVariable int id, Model model)
{
/*récuppérer le utilisateur de la base de données
select * from utilisateurs where id=id */
Utilisateur u=utilisateurRepository.findById(id).get();
/*sera utilisé par la validation de la modification pour récuper la photo
et le cv s'ils ne sont pas modifiés */
utilisateurAmodifier=u;
/*envoyer le utilisateur u à la vue modifier.jsp */
model.addAttribute("utilisateur",u);
/* afficher la vue modifier.jsp */
return "utilisateurs/modifier";

}

2.Créer la vue utilisateurs/modifier.jsp

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<html>
<head><title>Ajouter un utilisateur</title></head>
<body>
<style>.error{color:red;}</style>
<fieldset>
<legend>Inscription d'un utilsateur</legend>
<form:form method="post" modelAttribute="utilisateur"
action="${pageContext.request.contextPath}/utilisateurs/modifier" enctype='multipart/form-data' >
<!--enctype='multipart/form-data' > :est obligatoire pour envoyé des fichier au serveur-->
<table>
<tr>
<form:hidden path="id" />
<td>Nom</td>
<td><form:input path="nom" type="text" value="${utilisateur.nom }"/><form:errors path="nom" cssClass="error" /></td>
</tr>
<tr>
<td>Prénom</td>
<td><form:input path="prenom" type="text" value="${utilisateur.prenom }"/><form:errors path="prenom" cssClass="error" /></td>
</tr>
<tr>
<td>Email</td>
<td><form:input path="email" type="email" value="${utilisateur.email }"/><form:errors path="email" cssClass="error" /></td>
</tr>
<tr>
<tr>
<td>Passwod</td>
<td><form:input path="password" type="password" value="${utilisateur.password }"/><form:errors path="password" cssClass="error" /></td>
</tr>
<tr>
<td>Age</td>
<td><form:input path="age" type="number" value="${utilisateur.age }"/><form:errors path="age" cssClass="error" /></td>
</tr>
<tr>
<td>Photo</td>
<td>
<!--afficher la photo initiale -->
<img src="../../resources/${utilisateur.photo }" style="width:25px;"/>
<input name="PhotoUtilisateur" type="file"/>
</td>
</tr>
<tr>
<td>CV</td>
<td><input name="CvUtilisateur" type="file"/></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Valider"/></td>
</tr>
</table>
</form:form>

${message}
</fieldset>
</body>
</html>

3.Créer la méthode modifier() POST dans le controlleur UtilisateurController.java

/*validation des modification:la route /utilisateurs/modifier avec POST */
@RequestMapping(value="/modifier", method=RequestMethod.POST)
/*@ModelAttribute Utilisateur utilisateur :récuppérer l'objet envoyé par la vue :modelAttribute="utilisateur" */
public String modifier(@Valid @ModelAttribute Utilisateur utilisateur,
BindingResult form,Model model,
RedirectAttributes attributes,
@RequestParam("PhotoUtilisateur") MultipartFile PhotoUtilisateur,
@RequestParam("CvUtilisateur") MultipartFile CvUtilisateur,
HttpServletRequest servletRequest) throws IllegalStateException, IOException{
//si la validation des input à echouer
if (form.hasErrors()){
attributes.addFlashAttribute("message", "<span style='color:red;'>Veillez corriger les erreurs de validation</span>");
return "utilisateurs/modifier";
}
//si la validation est OK
else
{
/*instancier le services crée pour upload les fichiers */
FileManager fileManager=new FileManager();
//Vérifier si l'image est changé
if(!PhotoUtilisateur.isEmpty())
{
/*récupérer le dossier pour upload les photos */
String dossierImage = servletRequest.getSession().getServletContext().getRealPath("resources/uploads/utilisateursPhotos");
//1.Upload photo
/*remplir une liste par les extensions d'images autorisées */
List<String> extensionAutorisesPhoto=new ArrayList<String>();
Collections.addAll(extensionAutorisesPhoto, new String[]{"png","jpeg","gif","jpeg"});
/* Appeler la méthode upload du service FileManager et retoure la réponse */
HashMap<String,String>reponse=fileManager.upload(PhotoUtilisateur,dossierImage,extensionAutorisesPhoto);
String Typereponse=reponse.get("typeReponse");
String contenu=reponse.get("contenu");
//si la réponse retourne erreur
if(Typereponse.equals("Erreur"))
{
attributes.addFlashAttribute("message", "<span style='color:red;'>"+contenu+"</span>");
return "redirect:/utilisateurs/add";
}
//si l'upload du photo est OK
utilisateur.setPhoto("uploads/utilisateursPhotos/"+PhotoUtilisateur.getOriginalFilename());
}
else
{ //la photo non changé
utilisateur.setPhoto(utilisateurAmodifier.getPhoto());
}
//Vérifier si l'image est changé
if(!CvUtilisateur.isEmpty())
{
//2.Upload CV
String dossierCV = servletRequest.getSession().getServletContext().getRealPath("resources/uploads/utilisateursCV");
List<String> extensionAutorisesCV=new ArrayList<String>();
Collections.addAll(extensionAutorisesCV, new String[]{"pdf","doc","docx"});
HashMap<String,String> reponse=fileManager.upload(CvUtilisateur,dossierCV,extensionAutorisesCV);
String Typereponse=reponse.get("typeReponse");
String contenu=reponse.get("contenu");
if(Typereponse.equals("Erreur"))
{
attributes.addFlashAttribute("message", "<span style='color:red;'>"+contenu+"</span>");
return "redirect:/utilisateurs/";
}
//si l'upload du CV est Ok
utilisateur.setCv("uploads/utilisateursCV/"+CvUtilisateur.getOriginalFilename());
}
else
{
utilisateur.setCv(utilisateurAmodifier.getCv());
}
/*modifier le utilisateur :save() permet de modifier le utilisateur s'il existe un utilisateur
qui a le meme id que utilisateur sinon save() va ajouter un nouveau utilisateur dans la table
produits */
utilisateurRepository.save(utilisateur);
//Envoyer un message de confirmation à la vue index
attributes.addFlashAttribute("message", "Utilisateur "+utilisateur.getNom()+" est modifié");
return "redirect:/utilisateurs/";
}

}








Cours et TPs