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 :
- 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 :
- 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 dans le navigateur:
Code :
- Etat HTTP 500 - javax.el.PropertyNotFoundException: Property 'date' not found on type TPServlet.date
- type Rapport d''exception
- message javax.el.PropertyNotFoundException: Property 'date' not found on type TPServlet.date
- description Le serveur a rencontré une erreur interne qui l''a empêché de satisfaire la requête.
- exception
- org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: Property 'date' not found on type TPServlet.date
- org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
- org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
- org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
- org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
- org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
- TPServlet.listeDate.doGet(listeDate.java:18)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
- org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
- org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
- Filtre.FiltreTP.doFilter(FiltreTP.java:100)
- cause mère
- javax.el.PropertyNotFoundException: Property 'date' not found on type TPServlet.date
- javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:266)
- javax.el.BeanELResolver$BeanProperties.access$300(BeanELResolver.java:243)
- javax.el.BeanELResolver.property(BeanELResolver.java:353)
- javax.el.BeanELResolver.getValue(BeanELResolver.java:97)
- org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
- org.apache.el.parser.AstValue.getValue(AstValue.java:183)
- org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
- org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:967)
- org.apache.jsp.WEB_002dINF.listeDate_jsp._jspx_meth_c_005fout_005f1(listeDate_jsp.java:309)
- org.apache.jsp.WEB_002dINF.listeDate_jsp._jspx_meth_c_005fforEach_005f0(listeDate_jsp.java:266)
- org.apache.jsp.WEB_002dINF.listeDate_jsp._jspx_meth_c_005fotherwise_005f0(listeDate_jsp.java:229)
- org.apache.jsp.WEB_002dINF.listeDate_jsp._jspx_meth_c_005fchoose_005f0(listeDate_jsp.java:144)
- org.apache.jsp.WEB_002dINF.listeDate_jsp._jspService(listeDate_jsp.java:101)
- org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
- org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
- org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
- org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
- org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
- TPServlet.listeDate.doGet(listeDate.java:18)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
- javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
- org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
- org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
- Filtre.FiltreTP.doFilter(FiltreTP.java:100)
- note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/7.0.54.
- Apache Tomcat/7.0.54
|
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 :
- 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 :
- 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 :
- <%@ 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!!!
Message édité par issouf le 18-03-2015 à 04:17:39