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

Struts 1 Java Discussion :

la tag logic iterate avec une liste Map


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 191
    Points : 53
    Points
    53
    Par défaut la tag logic iterate avec une liste Map
    Bonjour tt le monde
    Est ce qu'on peut iterer une liste Map avec la tag <logic:iterate /> tout en affichant la clé et sa valeur?
    Si wi, est ce que vous pouvez me donnez un exemple ?

    et Merci d'avance.

  2. #2
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <table>
       <logic:iterate name="nomDuFormBean" property="uneMap" id="item">
          <tr>
    	<td><bean:write name="item" property="key"/></td>
    	<td><bean:write name="item" property="value"/></td>
          </tr>
       </logic:iterate>
    </table>

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 191
    Points : 53
    Points
    53
    Par défaut
    Voila ce que j'ai fait :
    ma bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    package myPack;
    import java.util.Map;
     
    public class MyBean {
    	private Map myMap;
     
    	public void setMyMap(Map m){
    		myMap=m;
    	}
    	public Map getMyMap(){
    		return myMap;
    	}
    }
    et Ma jsp est :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <%@ page language="java" pageEncoding="UTF-8"%>
    <%@ page import="java.util.Map" %>
    <%@ page import="java.util.HashMap" %>
    <%@ page import="myPack.MyBean" %>
     
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-template" prefix="template" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-nested" prefix="nested" %>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html:html locale="true">
      <head>
        <html:base />
     
        <title>MyJsp.jsp</title>
     
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
      </head>
     
      <body>
        <%
        	MyBean bean=new MyBean();
        	Map myMap=new HashMap(); 
        	myMap.put(new Integer(1),"One");
        	myMap.put(new Integer(2),"Two");
        	myMap.put(new Integer(3),"Three");
        	bean.setMyMap(myMap);
        %>
        <table>
        <logic:iterate name="MyBean" property="myMap" id="liste">
          <tr>
        	<td>
              <bean:write name="liste" property="key"/>:<bean:write name="liste" property="value"/> 
            </td>
           </tr>
    </logic:iterate>
    </table>
      </body>
    </html:html>
    mais une erreur se produit :
    javax.servlet.ServletException: Cannot find bean MyBean in any scope
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
    org.apache.jsp.MyJsp_jsp._jspService(MyJsp_jsp.java:168)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

  4. #4
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       	MyBean bean=new MyBean();
    ton instance de MyBean s'appelle bean et non MyBean donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        <logic:iterate name="bean" property="myMap" id="liste">

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 191
    Points : 53
    Points
    53
    Par défaut
    j'ai modifie mon code, mais la meme erreur sort :
    javax.servlet.ServletException: Cannot find bean bean in any scope
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
    org.apache.jsp.MyJsp_jsp._jspService(MyJsp_jsp.java:172)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

  6. #6
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    faut mettre le bean dans le scope page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pageContext.setAttribute("bean",bean) ;

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 191
    Points : 53
    Points
    53
    Par défaut
    Merci c_nvy maintenant mon code marche bien, mais juste une question pour l'affichage du contenu de mon map. Par exemple je veux affciher juste les values et que lorsque une value est nulle une ligne vide me genere.

    voila ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     <logic:iterate name="MyBean" property="myMap" id="liste">
          <tr>
            <td>
              <logic:empty name="liste" property="value">
                  <p>
             </logic:empty>
             <logic:notEmpty name="liste" property="value">
              <bean:write name="liste" property="value"/> 
            </logic:notEmpty>
            </td>
           </tr>
    </logic:iterate>
    Mais ça me marche pas !!

  8. #8
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 191
    Points : 53
    Points
    53
    Par défaut
    j'ai bien verfier, et ça marche bien, il n' y a pas de probleme. juste mon Map ne respecte pas l'ordre d'insertion.
    l'or de l'affichge, les champs avec des key pairs s'affichent les premiers.
    autre chose, si deux champs quise suivent ont des values null, une seule ligne vide qui se genere.

    est ce qu'il ya une solution pour cela??

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 191
    Points : 53
    Points
    53
    Par défaut
    je m'explique par cet exemple que j'ai fait:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     <body>
        <%
        	MyBean bean=new MyBean();
        	Map myMap=new HashMap(); 
        	myMap.put("un_1","One");
        	myMap.put("deux_2","Two");
        	myMap.put("trois_3","");
        	myMap.put("quatre_4","");
        	myMap.put("cinq_5","Five");
        	bean.setMyMap(myMap);
        	pageContext.setAttribute("bean",bean);
        %>
        <table>
     
    			<tr>
    				<td>
    					<logic:iterate name="bean" property="myMap" id="liste">
    						<p><bean:write name="liste" property="key"/></p>
    					</logic:iterate>	
    				</td>
    				<TD>
    				<logic:iterate name="bean" property="myMap" id="liste">
    					<logic:empty name="liste" property="value">
    						<p> </p>
    					</logic:empty>
    					<logic:notEmpty name="liste" property="value">
    						<p><bean:write name="liste" property="value"/></p>
    					</logic:notEmpty>
    				</logic:iterate>
    				</TD>
    			</tr>
    	</table>
      </body>
    Normalement le resultat de j'attend est :
    un_1 One

    deux_2 Two

    trois_3

    quatre_4

    cinq_5 Five
    mais ce que j'obtient est :
    cinq_5

    quatre_4 Five

    trois_3 One

    un_1 Two

    deux_2
    Donc qu'est ce que je peux faire pour regler le probleme?
    Pour le moment je cherche pas l'ordre des champs, juste generer des lignes vides lorsque s'il s agit des values null.

    et Merci d'avance.

  10. #10
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Tes valeurs ne sont pas égales à null mais à blanc vu que tu les initialises avec "".
    Essaie donc de faire le test avec les tags <logic:equal> et <logic:notEqual> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <logic:iterate name="MyBean" property="myMap" id="liste">
          <tr>
            <td>
              <logic:equal name="liste" property="value" value="">
                  <p>
             </logic:equal>
             <logic:notEqual name="liste" property="value" value="">
                  <bean:write name="liste" property="value"/> 
            </logic:notEqual>
            </td>
          </tr>
    </logic:iterate>
    Sinon, si tu veux que l'ordre d'insertion soit respecté, il faut utiliser une LinkedHashMap.

Discussions similaires

  1. [MAPPING] map avec une liste pour valeur
    Par djodjo dans le forum Hibernate
    Réponses: 0
    Dernier message: 11/03/2010, 18h39
  2. <logic:iterate> d'une Hashmap contenant une liste
    Par kenshiroseifu dans le forum Struts 1
    Réponses: 3
    Dernier message: 20/04/2009, 18h09
  3. Utilisation iterator avec une classe perso
    Par SteelBox dans le forum C++
    Réponses: 19
    Dernier message: 07/03/2005, 11h30
  4. [struts][iterate] problème logic:iterate avec un Vector
    Par jaimepasteevy dans le forum Struts 1
    Réponses: 9
    Dernier message: 31/03/2004, 18h05
  5. [Struts] logic:iterate avec un Vector
    Par laurentb dans le forum Struts 1
    Réponses: 18
    Dernier message: 03/03/2004, 14h42

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