Spring MVC:Modifier un Utilisateur
Les étapes à suivre
- 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
- 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
- 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/";
}
}