Spring MVC:Vendre un Produit à un Client

Les étapes à suivre

  1. 1Créer la méthode vendre() Mappé par GET permet de récupérer la liste des utilisateurs et le liste des produits puis les envoyer à la vue ventes/vendre.jsp Pour remplir la date et la quantité puis envoyer ces donnnées au controlleur VenteController.java
  2. 2Créer la vue ventes/vendre.jsp permettant d'afficher le formulaire pour ajouter une nouvelle vente et l'envoyr à la méthode vendre() POST pour valider l'ajout dans la table ventes
  3. 3Créer la méthode vendre() Mappé par POST permettant de récupérer les information saisies dans la vue vendre.jsp puis l'insérer dans la table ventes

1.Créer la méthode vendre() GET dans le controller VenteController.java

package com.ecomerce.controllers;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.ecomerce.DAO.ProduitRepository;
import com.ecomerce.DAO.UtilisateurRepository;
import com.ecomerce.DAO.VenteRepository;
import com.ecomerce.models.Produit;
import com.ecomerce.models.Utilisateur;
import com.ecomerce.models.Vente;

@Controller
@RequestMapping(value="/ventes/")
public class VenteController {

/*venteRepository:gérer les transactions dans la table ventes*/
@Autowired
VenteRepository venteRepository;
/*produitRepository les transactions dans la table produits */
@Autowired
ProduitRepository produitRepository;
/*utilisateurRepository les transactions dans la table utilisateurs */
@Autowired
UtilisateurRepository utilisateurRepository;
/*afficher le formulaire pour vendre un produit à un utilisateur */
@RequestMapping(value="/vendre")
public String vendre(Model m)
{
/* Récupérer la liste de prouits pour l'envoyer à la vue vendre.jsp pour séléctionner le
produit à vendre*/
List<Produit>listeProduits=produitRepository.findAll();
/* Récupérer la liste de utilisateurs pour l'envoyer à la vue vendre.jsp pour séléctionner
l'utilisateur*/
List<Utilisateur>listeUsers=utilisateurRepository.findAll();
/*Envoyer la liste des produits à la vue vendre.jsp */
m.addAttribute("listeproduits",listeProduits);
/*Envoyer la liste des utilisateurs à la vue vendre.jsp */
m.addAttribute("listeUsers",listeUsers);
/* afficher la vue vendre.jsp qui se trouve dans le dossier views/ventes/ */
return "ventes/vendre";
}
}

2.Créer la vue ventes/vendre.jsp

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<head>
</head>
<body>
<fieldset>
<legend>Vendre un Produit</legend>
<form method="post"
action="${pageContext.request.contextPath}/ventes/vendre">
<table>
<tr>
<td>Date</td>
<td><input name="dateVente" type="date"/></td>
</tr>
<tr>
<td>Utilisateur</td>
<td>
<select name="client">
<!-- parcourir la liste envoyée par le controller afin de créer une <select -->
<c:forEach items="${listeUsers}" var="u">
<option value="${u.id}">${u.nom} ${u.prenom}</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td>Produit</td>
<td>
<select name="produit">
<!-- parcourir la liste envoyée par le controller afin de créer une <select -->
<c:forEach items="${listeproduits}" var="p">
<option value="${p.id}">${p.nom}</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<td>Quantite</td>
<td><input name="quantite" type="number"/></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Valider"/></td>
</tr>
</table>
</form>

${message}
</fieldset>

3.Créer la méthode vendre() POST dans le controller VenteController.java

/*Récupérer les inputs envoyés par le formulaire de la vue vendre.jsp
* puis insérer une vente dans la table vente */
@RequestMapping(value="/vendre",method=RequestMethod.POST)
public String vendreSave(
/* Récupérer les valeurs des inputs du formulaire */
@RequestParam Map<String, String> inputs,
RedirectAttributes re) throws ParseException
{
//vérifier si tout les champs sont remplis
if(!inputs.get("quantite").isEmpty() && !inputs.get("produit").isEmpty() && !inputs.get("client").isEmpty() )
{
//Récupérer la date saisie
String datevente = inputs.get("dateVente");
/* Récupérer la quantité et la convertir à un entier */
int quantite = Integer.parseInt(inputs.get("quantite"));
int idProduit = Integer.parseInt(inputs.get("produit"));
int idUser = Integer.parseInt(inputs.get("client"));
/*Récupérer le produit par son id à partir de la table produit */
Produit p=produitRepository.findById(idProduit).get();
/*Récupérer l'utilisateur par son id à partir de la table utilisateurs */
Utilisateur u=utilisateurRepository.findById(idUser).get();
/* Créer une vente vide puis ajouter les valeurs de ses attributs */
Vente v=new Vente();
v.setClient(u);
Date datev=new SimpleDateFormat("yyyy-mm-dd").parse(datevente);
v.setDateVente(datev);
v.setProduit(p);
v.setQuantite(quantite);
//Insérer la vente
venteRepository.save(v);
re.addAttribute("message","Le produit est vendu");
}
else
{
re.addAttribute("message","Tout les champs sont obligatoires");
}
return "redirect:/ventes/vendre";
}








Cours et TPs