Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JavaEE]Insérer une nouvelle ligne dans un tableau

    30 avril 2022 à 18:20:12

    Bonjour,

    Je voudrais créer une application web où on peut ajouter et supprimer des produits dans un panier.

    Pour l'instant j'ai ce code qui me permet d'ajouter un produit sur un tableau : 

    Ma servlet : 

    package panier;
    
    import java.io.*;
    import java.util.*;
    import jakarta.servlet.*;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.*;
    
    
    
    /**
     * Servlet implementation class AjouterPanier
     */
    
    @WebServlet("/ajouterProduit")
    public class AjouterPanier extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
        /**
         * Default constructor. 
         */
        public AjouterPanier() {
        	super();
        }
    
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		RequestDispatcher dispatcher  = request.getRequestDispatcher("panier.jsp");
    		dispatcher.forward(request, response);
    		
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		String nom = request.getParameter("nom");
    		double prix = Double.parseDouble(request.getParameter("prix"));
    		String ref = request.getParameter("ref");
    		
    		Produit p = new Produit();
    		
    		p.setNom(nom);
    		p.setPrix(prix);
    		p.setRef(ref);
    		
    		List<Produit> produits = new ArrayList<Produit>();
    		
    		produits.add(p);
    		
    		HttpSession session = request.getSession();
    		
    		session.setAttribute("produits", produits);
    		
    		RequestDispatcher dispatcher  = request.getRequestDispatcher("panier.jsp");
    		dispatcher.forward(request, response);
    		
    		System.out.println(Arrays.toString(produits.toArray()));
    		
    		
    		
    		
    		
    	}
    
    }
    

    Ma JSP qui me permet d'écrire les données : 

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
        
    
    
    <!DOCTYPE html>
    <html>
    <head>
    	<meta name="viewport" content="width=device-width,initial-scale=1">
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" />
    	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
    	<meta charset="ISO-8859-1">
    <title>Ajouter un produit</title>
    </head>
    <body>
    	
    
    </head>
    <body>
    	<div>
    		<h2>Ajouter un produit</h2>
    		
    		<form action="<%=request.getContextPath() %>/AjouterPanier" method="post">
    			<label for="ref">Nom du produit :</label><br>
    			<input type="text" name="nom" required><br>
    			
    			<label for="ref">Prix du produit :</label><br>
    			<input type="number" name="prix" required><br>
    			
    			<label for="ref">Référence :</label><br>
    			<input type="text" name="ref" required><br><br>
    			
    			<input type="submit" value="Ajouter le produit">
    		</form>
    	</div>
    
    	
    </body>
    </html>

    Et ma JSP où s'affiche les produits : 

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <!DOCTYPE html>
    <html>
    <head>
    	<meta name="viewport" content="width=device-width,initial-scale=1">
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" />
    	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
    	<meta charset="ISO-8859-1">
    <title>Panier</title>
    </head>
    
    <style>
    
    </style>
    
    
    <body>
    	
    
    </head>
    <body>
    	<h3>PANIER</h3>
    	<div>
    		
    		<form method="GET" action="ajouterProduit.jsp">
        		<input type="submit" value="Ajouter un produit" />
    		</form>
    		
    		
    		<div>
    		
    			Montant total :
    			
    			Frais de port : 
    		
    		</div>
    		
    		<br>
    		
    		<div class="produit">
    			<c:forEach items="${produits}" var="produits">
    				<table class="table">	
    					<thead>
    					    <tr>
    					      <th scope="col">Nom</th>
    					      <th scope="col">Prix</th>
    					      <th scope="col">Référence</th>
    					    </tr>
    					</thead>
    					<tbody>
    						<tr>
    		  					<td><c:out value="${produits.nom}" /></td>
    		 					<td><c:out value="${produits.prix}" /> <b>Euros<b> </td>
    		 					<td><c:out value="${produits.ref}" /></td>
    						 </tr>
    					</tbody>
    				</table>
    			</c:forEach>
    		
    		</div>
    		
    	</div>
    
    	
    </body>
    
    </html>

    Ce que je veux c'est pouvoir ajouter une nouvelle ligne sur le tableau quand j'ajoute un nouveau produit. 

    Car pour l'instant, ce code me permet seulement de changer les valeurs de la première ligne. 

    J'ai essayé d'utiliser une List pour stocker les valeurs du produit mais au lieu de pouvoir ajouter un nouvel objet produit, il n'y a qu'une seule valeur qui est présente à chaque fois dans la List.


    Pourriez-vous s'il vous plaît m'indiquer si possible comment je pourrais ajouter un nouvel objet dans la list et ensuite pouvoir rajouter une nouvelle ligne avec les valeurs de cet objet.

    Je vous remercie d'avance




    • Partager sur Facebook
    • Partager sur Twitter
      2 mai 2022 à 11:25:32

      bonjour,

      le problème c'est qu'à chaque soumission du formulaire une nouvelle instance de la liste est créée, du coup les données précédemment stockées dans la liste sont vidées.

      Pour remédier à cela, avant d'instancier la liste, il faut s'assurer que la session ne contient déjà pas la liste.l'idée ici c'est d'instancier  la liste une seule fois pendant tout le parcours de l'Internaute.

      • Partager sur Facebook
      • Partager sur Twitter

      [JavaEE]Insérer une nouvelle ligne dans un tableau

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown