Partage
  • Partager sur Facebook
  • Partager sur Twitter

Enregistrer un planning en session

    11 septembre 2019 à 19:20:38

    Bonjour, j'ai un problème aujourd'hui j'ai un planning qui permet a l'utilisateur de cliquer. Au clic la case se colore qui signifie qu'elle est enregistrer en base avec le jour et l'heure correspondante. Le probleme c'est que meme si elle est enregistrer en base lorsque l'utilisateur se deconnecte et se reconnecte ou un raffraichissement de page, la case coloré a disparu comme si elle n'avait pas été coché. 

    C'est ce compportement que je souhaite modifier mais je suis un peu paumé. Dans ma servlet j'ai les entetes correspondantes ainsi que la ligne. J'ai essayé avec une hashmap sans grand résultat et avec une fonction qui me retourne un booleen et mettre ce booleen en session mais ensuite je ne sais pas faire. Je vous met une partie du code si quelqu'un peut m'aider !! 

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    HashMap<String, Boolean> hash = new HashMap<>();
    		Calendrier calendrier = new Calendrier();
    		// RECUPERER LA SESSION EN COURS
    		HttpSession session = request.getSession();
    		
    		// RECUPERE L'ID USER EN COURS
    		utilisateur = (Utilisateur) (session.getAttribute("sessionNurse"));
    		
    		if (request.getParameter("heure") != null) {
    			String jour = request.getParameter("jour");
    
    			// INSERER DANS DISPONIBILITE
    			dispo.setId_utilisateur(utilisateur.getId());
    			dispo.setDates_dispo(jour);
    			
    			PlanningForm form = new PlanningForm(daoplan, dispodao);
    			Planning planning = form.validplanning(request, dispo);
    // 1ere solution , avec en string les dates en entete et le booleen qui correspond à l'heure
    			hash.put(dispo.getDates_dispo(), planning.isHuit());
    			//2e solution
    			boolean test = test(calendrier, planning);
    			
    			if(test == true) {
    				request.setAttribute("dispo", dispo);
    				System.out.println(session.toString());
    			}
    	
    
    		}else if (request.getParameter("heureSupprim") != null) {
    
    			
    			//Return jsp class change "class + vert"
    			String heure = request.getParameter("heureSupprim");
    			String jour = request.getParameter("jourSupprim");
    			
    			PlanningForm form = new PlanningForm(daoplan, dispodao);
    			form.SupprPlan(request, utilisateur, dispo);
    		}
    
    	}
    	
    	public boolean test(Calendrier calendrier, Planning planning) {
    		calendrier = new Calendrier();
    		boolean test = false;
    		//il faudrait donc que je fasse cette action pour toute les cellules 
    		if (hash.containsKey(calendrier.getColumnName(1))) {
    			if(planning.isHuit() == true) {
    				test =  true;
    			}else {
    				test=false;
    			}
    		}
    		return test;
    	}
    	<tr>
    										<th scope="col"></th>
    										<th scope="col">${calendrier.getColumnName(1)}</th>
    										<th scope="col">${calendrier.getColumnName(2)}</th>
    									
    										</tr>
    										
    									<tr>
    										<th>8h-9h</th>
    										<td onclick='changeColor(this)' class="eight">${disponibilite.dispo}</td>
    										<td onclick='changeColor(this)' class="eight"></td>
    										
    
    									</tr>
    									<tr>
    									
    										<th>9h-10h</th>
    										<td onclick='changeColor(this)' class="nine"></td>
    										<td onclick='changeColor(this)' class="nine"></td>
    										
    									</tr>

    La fonction changecolor, change le statut "class" si activer ou non en ajoutant un active a la fin 

    function changeColor(oTd){
    							
    							  var id = $(oTd).attr('class')
    								console.log(id);
    							
    							  var sClass ='active',
    							      isVide = !oTd.classList.contains(sClass);
    							  if(isVide){
    							    oTd.classList.add(sClass) ; 
    							   
    							   
    							  }else{
    							    oTd.classList.remove(sClass) ; 


    Merci pour votre aide !!


    • Partager sur Facebook
    • Partager sur Twitter
      12 septembre 2019 à 14:28:47

      il faut récupérer l'idsession du coté serveur et aller le stocker dans sessionstorage côté client.

      Ensuite, dès que tu as raffraichi ta page, tu récupères idsession et tu l'ajoutes soit dans url ou soit en entete http...

      • Partager sur Facebook
      • Partager sur Twitter
        12 septembre 2019 à 18:56:53

        Alors j'ai récupérer l'id de la session mais ou trouver session storage ?
        • Partager sur Facebook
        • Partager sur Twitter
          13 septembre 2019 à 20:13:10

          Mais comment récupérer ma session coté client ? Ensuite j'ai vue qu'il y avait localstorage qui permet de garder les données meme après fermeture du navigateur ce qui n'est pas le cas pour le session storage.
          • Partager sur Facebook
          • Partager sur Twitter
            16 septembre 2019 à 7:51:41

            localStorage does the same thing, but persists even when the browser is closed and reopened.

            exactement donc tu dois l'utiliser


            https://developer.mozilla.org/fr/docs/Web/API/Window/localStorage

            -
            Edité par unchained77 16 septembre 2019 à 7:52:04

            • Partager sur Facebook
            • Partager sur Twitter
              17 septembre 2019 à 19:03:07

              Oui merci, le probleme pour moi est que j'arrive a envoyer les donnée d'ajax a la servlet mais de la servlet a ajax je ne sais pas faire. Suis-je obligée d'utiliser Json pour ca ? Je suis désolée je suis encore débutante
              • Partager sur Facebook
              • Partager sur Twitter
                17 septembre 2019 à 23:23:04

                HttpServletResponse response
                Et en utilisant l'objet response ?
                • Partager sur Facebook
                • Partager sur Twitter
                  21 septembre 2019 à 21:01:55

                  Non jsuis désolée mais je n'y arrive pas. Si je fais avec le forward j'ai "undefined" 

                  	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                  
                  		Calendrier calendrier = new Calendrier();
                  		// RECUPERER LA SESSION EN COURS
                  		HttpSession session = request.getSession();
                  
                  		// RECUPERE L'ID USER EN COURS
                  		utilisateur = (Utilisateur) (session.getAttribute("sessionNurse"));
                  		//GET ID SESSION
                  		request.setAttribute("idsession", idsession);
                  		
                  		if (request.getParameter("heure") != null) {
                  			String jour = request.getParameter("jour");
                  
                  			// INSERER DANS DISPONIBILITE
                  			dispo.setId_utilisateur(utilisateur.getId());
                  			dispo.setDates_dispo(jour);
                  			
                  			PlanningForm form = new PlanningForm(daoplan, dispodao);
                  			Planning planning = form.validplanning(request, dispo);
                  
                  
                  		}else if (request.getParameter("heureSupprim") != null) {
                  
                  			
                  			//Return jsp class change "class + vert"
                  			String heure = request.getParameter("heureSupprim");
                  			String jour = request.getParameter("jourSupprim");
                  			
                  			PlanningForm form = new PlanningForm(daoplan, dispodao);
                  			form.SupprPlan(request, utilisateur, dispo);
                  		}
                  	
                  		this.getServletContext().getRequestDispatcher(URL_PLANNING).forward(request, response);
                  	}

                  Et si je fais avec ca : 

                  response.getWriter().write(idsession);

                  J'ai une erreur : 

                  java.lang.NullPointerException
                  	at org.apache.catalina.connector.CoyoteWriter.write(CoyoteWriter.java:180)
                  	at com.julia.servlets.PlanningServlet.doPost(PlanningServlet.java:115)
                  	at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)

                  Et voici ce que j'ai mis dans mon script :

                  					  if (sessionStorage.getItem("idsession")) {
                  
                  								  data = sessionStorage.getItem("idsession");
                  							  }
                  							  localStorage.setItem("idsession", data);
                  							  console.log(localStorage.getItem("idsession"));
                  							}





                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 septembre 2019 à 21:55:30

                    request.setAttribute("idsession", idsession);

                    Ton idsession n'est pas initialisé, il manque peut être

                    String idsession = request.getSession().getId()

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 septembre 2019 à 23:56:50

                      Roooh oui j'ai fais tellement de manip que j'en ai supprimé le plus important, cependant j'ai mis l'id de la session dans l'url et mes cellules ne sont toujours pas sauvegardées 
                      	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                      		/* Récupération de la session depuis la requête */
                      
                      		HttpSession session = request.getSession();
                      		/*
                      		 * Si l'objet utilisateur n'existe pas dans la session en cours, alors
                      		 * l'utilisateur n'est pas connecté.
                      		 */
                      		if (session.getAttribute(ATT_SESSION_NURSE) == null) {
                      
                      			/* Redirection vers la page publique */
                      			response.sendRedirect(request.getContextPath() + ACCES_PUBLIC);
                      		} else {
                      			/* Affichage de la page restreinte */
                      			
                      			// AFFICHER LES JOURS DE LA SEMAINE, APPEL METHODE COLUMN NAME
                      			request.setAttribute("calendrier", calendrier);
                      			if(request.getParameter("idsession") != null) {
                      				
                      				String id = request.getParameter("idsession");
                      				System.out.println("idsession" + id);
                      			 this.getServletContext().getRequestDispatcher(URL_PLANNING + "?id=" + id);
                      			}
                      		
                      			//this.getServletContext().getRequestDispatcher(URL_PLANNING).forward(request, response);
                      		}
                      	}
                      function changeColor(oTd){
                      							var data;
                      							
                      							  var id = $(oTd).attr('class')
                      								console.log(id);
                      							
                      							  var sClass ='active',
                      							      isVide = !oTd.classList.contains(sClass);
                      							  if(isVide){
                      							    oTd.classList.add(sClass) ; 
                      							    
                      							     $.post("planning", {
                      									heure : id, 
                      									jour : getHeader(oTd).join()
                      								}, function(data) {
                      									data = data;
                      																
                      									if (localStorage.getItem("idsession")) {
                      
                      										data = localStorage.getItem("idsession");
                      									}
                      									
                      									localStorage.setItem("idsession", data);
                      									
                      							
                      								}); 
                      							   
                      							  }else{
                      							    oTd.classList.remove(sClass) ; 
                      							    
                      							    $.post("planning", {
                      									heureSupprim : id, 
                      									jourSupprim : getHeader(oTd).join()
                      								}, function(data) {
                      								data = data;
                      								}); 
                      							    							  }
                      							  
                      							  $.get("planning", {
                      								  idsession : localStorage.getItem("idsession")
                      							  }, function(data) {
                      								  							  }); 							 
                      							}


                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 septembre 2019 à 22:13:01

                        console.log('Récupérons cette idsession après rafraichissement de la page actuelle');
                        let idsession = sessionStorage.getItem('idsession');
                        if(idsession) {
                            // Réécriture de l'url et on lui donne idsession !
                            $.post('planning?sessionid=' + idsession, (data) => {
                                // Cette session a deja un message : salut
                                console.log(data);
                            });
                        } else {
                            $.post('planning',(idsession) => {
                                console.log('Mon idsession est le : ' + idsession);
                                console.log('sauvons cette idsession dans la sessionStorage');
                                localStorage.setItem('idsession', idsession);        
                            });
                        }
                        
                        

                        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                         
                            // RECUPERER LA SESSION EN COURS
                            HttpSession session = request.getSession();
                            String idsession = session.getId(); 
                            String msg = session.getAttribute(idsession);
                            if(msg != null) {
                                // si le message exite déjà dans cette session 
                                response.getWriter().write("Cette session a deja un message : " +  msg);
                            } else {
                                // créons le message dans cette session
                                session.setAttribute(idsession,"salut");
                                // J'envois l'id session au client
                                response.getWriter().write(idsession);
                            }
                        }
                        J'aurais imaginé un code comme ça dans mes testes.
                        Bien évidement je ne l'ai pas testé.:magicien:
                        Je ne garantie en rien du résultat voulu ! :ange:

                        -
                        Edité par unchained77 23 septembre 2019 à 11:14:11

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 septembre 2019 à 21:09:51

                          Tes messages remontent parfaitement et du coup si je comprend bien, dès que mon utilisateur va cliquer il faut que j'aille enregistrer cette cellule dans la session du client en front ou en back 

                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 septembre 2019 à 22:50:51

                            toutes les actions de l'utilisateurs seront stockés dans la session X ! imaginations que l'utilisateur ai besoin de récupérer son panier dans la session X après un refresh accidentel de sa page, il devra alors  renseigner l'idsession de X de sa storagelocal (récupéré et sauvé précédemment voir mon code..) au serveur  pour revenir dans la session X contenant son panier ! 

                            undestood ?

                            -
                            Edité par unchained77 23 septembre 2019 à 22:57:19

                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 septembre 2019 à 21:48:18

                              Ah oui j'ai compris, c'est parce que j'utilise un .load et que mon url de base n'est pas sur planning donc je vais m'occuper de ca désormais, je te remercie pour ta patience et tes explications ! :)
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Enregistrer un planning en session

                              × 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