IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Afficher le nouveau enregistrement dans la liste.


Sujet :

Développement Web en Java

  1. #1
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut Afficher le nouveau enregistrement dans la liste.
    Bonjour à tous,


    J'ai un problème de stockage d'une date fraichement créée dans une map dont voici la structure à l'initialisation dans le filtre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(session.getAttribute(dateSession) == null){
    			List<date> listedates = DateDao.ListeDesDates();
    			Map<Date,date> mapDate = new HashMap<Date,date>();
     
    			for(date dat : listedates){
    				mapDate.put(dat.getDate(), dat);
    			}
    			session.setAttribute("Dates", mapDate);
    		}
    Comme vous pouvez le constater cette map contient les enregistrements du bean date dont voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package LesObjets;
     
    import java.sql.Date;
     
    public class date {
       private Date date;
     
    public Date getDate() {
    	return date;
    }
     
    public void setDate(Date date) {
    	this.date = date;
    }
     
    }
    Au fait, lorsque j'ajoute une date dans la table date et en cliquant sur le lien qui affiche la liste des dates enregistrées j'ai l'erreur suivante :


    Nom : Capture.PNG
Affichages : 185
Taille : 118,2 Ko



    Donc j'ai pu deduire que l'itération de la map dans la jsp ne trouve pas le nouveau enregistrement dans le bean.


    Voici comment je stocke le nouveau enregistrement dans la map :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
             DateMetier dateMetier = new DateMetier(daoDate); 
     
             java.util.Date dat1 = dateMetier.infoDate(request); /*Je pense que c'est ici ma première erreur car je dois normalement instancier mon bean date comme ça "date dat = dateMetier.infoDate(request)" mais eclipse m'impose de faire "java.util.Date dat1 = dateMetier.infoDate(request);" et de declarer la méthode "infoDate" de type Date et non date(qui est le nom de mon bean).*/
     
     
             request.setAttribute(dateCons, dat1);
             request.setAttribute(dateMetierCons, dateMetier);
     
             if(dateMetier.getErreurs().isEmpty()){
     
                 HttpSession session = request.getSession();
                 Map<Date,date> Dates = (HashMap<Date, date>) session.getAttribute("Dates");
     
                 if(Dates == null){
                	 Dates = new HashMap<Date,date>();
                 }
                 Dates.put((Date) dat1, dat);/*Et je pense que c'est ici ma deuxième erreur car normalement je dois faire Dates.put(dat.getDate(), dat) ; mais en faisant ça je remarque qu'eclipse me souligne "getDate" en rouge.Pour ce qui est de cette deuxième erreur je me dis qu'elle découle de la première car j'ai pas pu instancier mon bean comme il se doit; c'est-à-dire faire "date dat = dateMetier.infoDate(request)".*/
                 session.setAttribute(dateMapCons, Dates);
    }
    Voici le code de la méthode infoDate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public Date infoDate(HttpServletRequest request){
        	String dat = getValeurSaisie(request,dateCons);
     
           SimpleDateFormat conversion =  new SimpleDateFormat(formatDate);
     
        	java.util.Date data = null;
     
    		try {
    			data = conversion.parse(dat);
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
     
        	java.sql.Date maDate = new java.sql.Date(data.getTime());
     
        	date da = new date();
     
        	traitementDate(maDate,da);
        	try{
        	if(erreurs.isEmpty()){
        		daoDate.EnregistrerDate(maDate);
        		resultat = "Date bien inserée.";
        	}else{
        		resultat = "Date non inserée.";
        	}
         }catch(DAOException d){
        	 setErreurs( "imprévu", "Erreur imprévue lors de la création." );
    		  resultat = "Échec de la création de la commande : une erreur imprévue est survenue, merci de réessayer dans quelques instants.";
    		  d.printStackTrace();
         }
    		return maDate;
     
        }
    Voici comment je fais l'affichage dans la jsp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <c:choose>
    <c:when test = "${empty sessionScope.Dates}">
    <c:out value = "Aucune date enregistrée."/>
    </c:when>
    <c:otherwise>
    <table border="1">
    <tr>
    <td>Date</td>
    <td colspan = "2">Action</td>
    </tr>
    <c:forEach items = "${sessionScope.Dates}" var = "mapDate">
    <tr>
    <td><c:out value = "${mapDate.value.date}"/></td>
    <td><a href = "<c:url value = "/supprimerDate"><c:param name = "date" value = "${mapDate.key}"/></c:url>"><img src = "Image/sup.png" alt = "Supprimer" title = "Supprimer"/></a></td>
    <td><a href = "<c:url value = "/modifierDate"><c:param name = "date" value = "${mapDate.key}"/></c:url>"><img src = "Image/modif.png" alt = "Modifier" title = "Modifier"/></a></td>
    </tr>
    </c:forEach>
    </table>
    </c:otherwise>
    </c:choose>
    <!--<c:out value = "${sessionScope.dates}"/>
    <c:out value = "${sessionScope.session}"/>-->
    </body>
    </html>

    A mon avis si je parviens à bien instancier mon bean date (c'est-à-dire faire "date dat = dateMetier.infoDate(request)".) le problème sera sans doute résolu

    Merci d'avance!!!

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    1. Si tu veux récupérer un type date en retour infoDate, il faut retourner un type date.

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      public Date infoDate(HttpServletRequest request){
      Là, tu retournes une type Date, qui est vraissembablement du java.util.Date (ce que tu as importé).

      La méthode retourne
      Un type java.sql.Date, compatible avec java.util.Date, puisqu'il l'étend.

      Tu dois donc retourner du type date, et la variable da, qui est bien du type date.
    2. L'erreur dit qu'il n'y a pas de propriété date dans le type TPServlet.date. Bizarre, parce que tu nous montres un type LesObjects.date...
      Si on essaye d'accèder à une propriété date, c'est parce que par <c:out value = "${mapDate.value.date}"/></td>, on accède bien à la propriété date de l'objet en valeur de la Map.Entry qu'on obtient en itérant, qui, donc serait du type TPServlet.date d'après le message d'erreur, et qui n'aurait pas de propriété date.
    3. ton code est une super usine à gaz, ce qui ne te facilte pas la compréhension de ton propre code (sans parler du nommage des variables (da, dat, dat1...pfiouh...) et des conventions de nommage). Pourquoi faire une map qui mappe des Date avec des wrappers de Date ? En plus, tu pars d'une date en String, que tu convertis en java.util.Date, que tu convertis en java.sql.Date, que tu wrappes dans un type LesObjects.date...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut
    Bonjour,

    Quand je déclare la méthode infoDate de type date c'est-à-dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     public date infoDate(HttpServletRequest request){
        	String dat = getValeurSaisie(request,dateCons);
     
           SimpleDateFormat conversion =  new SimpleDateFormat(formatDate);
     
        	java.util.Date data = null;
     
    		try {
    			data = conversion.parse(dat);
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
     
        	java.sql.Date maDate = new java.sql.Date(data.getTime());/*Je convertis du String à "java.sql.Date" puisque c'est une date que je dois insérer dans ma  table date . */
     
        	date da = new date();
     
        	traitementDate(maDate,da);
        	try{
        	if(erreurs.isEmpty()){
        		daoDate.EnregistrerDate(maDate);//insertion de la date via la méthode EnregistrerDate(maDate).
        		resultat = "Date bien inserée.";
        	}else{
        		resultat = "Date non inserée.";
        	}
         }catch(DAOException d){
        	 setErreurs( "imprévu", "Erreur imprévue lors de la création." );
    		  resultat = "Échec de la création de la commande : une erreur imprévue est survenue, merci de réessayer dans quelques instants.";
    		  d.printStackTrace();
         }
    		return da;
     
        }

    c'est dans la méthode doPost() que je n'arrives pas à instancier mon bean date correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
             DateMetier dateMetier = new DateMetier(daoDate); 
     
             date dat1 = dateMetier.infoDate(request);/*Eclipse me souligne en rouge "dateMetier.infoDate(request)" et me propose 2 options :
    Soit de changer le type dat1 en date et en choisissant cette option j'ai ça :" LesObjets.date dat1 = dateMetier.infoDate(request);"(LesObjets est le package dans laquel se trouve le bean date); l'insertion se fait correctement mais l'erreur persiste quand je clique sur le lien qui affiche la liste des dates pourtant je fait(Dates.put(dat1.getDate(), dat).

    Soit de changer la méthode infoDate en TPServlet.date donc au lieu de date(qui est le nom du bean date)."TPServlet" est le package dans lequel se trouve la servlet date contenant la méthode doPost() et en choisissant cette option "la méthode infoDate" ne permet pas le retour de type date(c'est-à-dire mon bean date).L'insertion n'a jamais eu lieu*/


    Pour ce qui est de la map je la wrappes avec les wrappers Date car la clé de la map doit être une date "au format yyyy-MM-dd" voir la variable du bean date c'est-à-dire :

    si y a une autre manière de déclarer cette variable merci de m'avoir orienter; j'ai essayé avec le type Long "private Long date",là au niveau de l'affichage je n'ai qu'une partie de la date donc par exemple au lieu de m'afficher "2015-04-16" ça m'affiche "2015".

    Merci d'avance!!!

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Kasko Voir le message
    Bonjour,

    Quand je déclare la méthode infoDate de type date ...
    c'est dans la méthode doPost() que je n'arrives pas à instancier mon bean date correctement :
    ...
    Soit de changer le type dat1 en date et en choisissant cette option j'ai ça :" LesObjets.date dat1 = dateMetier.infoDate(request);"(LesObjets est le package dans laquel se trouve le bean date); l'insertion se fait correctement mais l'erreur persiste quand je clique sur le lien qui affiche la liste des dates pourtant je fait(Dates.put(dat1.getDate(), dat).

    Soit de changer la méthode infoDate en TPServlet.date donc au lieu de date(qui est le nom du bean date)."TPServlet" est le package dans lequel se trouve la servlet date contenant la méthode doPost() et en choisissant cette option "la méthode infoDate" ne permet pas le retour de type date(c'est-à-dire mon bean date).L'insertion n'a jamais eu lieu*/

    Donc tu as en plus 2 types date, un dans le package TPServlet, un dans LesObjets ! Pas étonnant que tu te mélanges les pinceaux. Si tu as une classe TPServlet.date et une classe LesObjets.date, ce sont 2 classes différentes, de nom différent (le package faisant partie du nom). Elle ont beau faire la même chose, ou être implémentées exactement de la même manière, ce ne sont pas les mêmes. Question : pourquoi 2 classes différentes ? Ensuite, il faut choisir : soit tu manipules des instances de type LesObjets.date, soit tu manipules des instances de type TPServlet.date, soit tu fais des conversions de l'une vers l'autre (histoire de compliquer encore plus).
    Je suppose que la servlet avec la méthode doPost est, elle aussi, dans le package TPServlet : donc le type date que tu références dans cette classe est par défaut celle du même package. Pour en utiliser une autre, il suffit de l'importer (import LesObjets.date;. Ainsi, à chaque fois que tu auras date dans le source de la servlet, ce ne sera plus TPServlet.date, mais LesObjets.date qui sera utilisé.

    Citation Envoyé par Kasko Voir le message
    Pour ce qui est de la map je la wrappes avec les wrappers Date car la clé de la map doit être une date "au format yyyy-MM-dd" voir la variable du bean date c'est-à-dire :
    La classe java.util.Date ne porte aucun format. Le format est géré uniquement lorsqu'on transforme un java.util.Date en String. Donc je ne vois pas le rapport. Si la clef est une String au format "yyyy-MM-dd", la map doit être de type Map<String, Date>._

    Je me demande si tu ne confonds pas avec le format par défaut d'affichage d'un java.sql.Date. Si tu affiches un java.sql.Date, tu auras un affichage sous cette forme yyyy-MM-dd, mais ça ne veut pas dire que cette date est une chaîne qui a cette forme. Les classes en Java représentent le type de la donnée qu'elles manipulent : la façon dont elles s'affichent ne doit pas être prise en considération. Pour une Map, ce sont les méthodes hashCode() et equals() qui sont utilisées pour valider l'égalité entre une clef de recherche (celle qu'on passe à la méthode Map.get(clef)) et une clef de mapping (celle qu'on passe à Map.put(clef, valeur)). On se fout du résultat de la méthode toString(), qui est ce qui s'affiche, dans la gestion de la clef dans une Map.

    Citation Envoyé par Kasko Voir le message
    si y a une autre manière de déclarer cette variable merci de m'avoir orienter; j'ai essayé avec le type Long "private Long date",là au niveau de l'affichage je n'ai qu'une partie de la date donc par exemple au lieu de m'afficher "2015-04-16" ça m'affiche "2015".
    Un Long c'est un Long : si ça affiche 2015 quand tu affiches le Long, c'est que tu lui as donné comme valeur 2015. Si tu y mets 42 : ça affichera 42. Faut voir comment tu passes de ton java.sql.Date (à priori, de ce que j'ai compris, les dates proviennent d'une base de données), à ce Long.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut
    Bonjour,

    Exactement les données proviennent d'une base de données mais le souci eclipse ne reconnait pas "l'import LesObjets.date" mais quand même j'ai réussi à résoudre le problème en changeant le nom du bean. Maintenant je voulais afficher les dates que je sélectionnes depuis la base de données en format "dd-MM-yyyy" dans la liste des dates.Si vous avez une idée de comment faire merci de me guider.

Discussions similaires

  1. Afficher les elements stockés dans une liste
    Par Triste dans le forum Débuter
    Réponses: 3
    Dernier message: 15/10/2007, 15h28
  2. Réponses: 1
    Dernier message: 14/09/2007, 18h04
  3. Réponses: 1
    Dernier message: 08/06/2007, 09h12
  4. Réponses: 4
    Dernier message: 13/11/2006, 23h24
  5. Enregistrement dans une liste déroulante & Msgbox
    Par tintinmarre dans le forum Access
    Réponses: 6
    Dernier message: 29/09/2005, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo