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;
}
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) ;
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.
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
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"));
}
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) {
});
}
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é.
Je ne garantie en rien du résultat voulu !
- Edité par unchained77 23 septembre 2019 à 11:14:11
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
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
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 !
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.
Et en utilisant l'objet response ?