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 :

Afficher le contenu d'une HashMap dans une jsp (tag logic)


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Par défaut Afficher le contenu d'une HashMap dans une jsp (tag logic)
    Bonjour,
    Je souhaiterais afficher le contenu d'un hashmap dans une page jsp en passant par le tag "logic", je me bats depuis quelques jours maintenant en cherchant un peu partout sur le net mais rien y fait.

    Peut-etre que je m'y prends mal...si c'est le cas pourriez-vous m'orienter vers une solution mieux appropriée.

    J'aimerais donc trouver une solution, et savoir si je devrais utiliser cette même méthode pour afficher une requête d'une base de données.

    merci d'avance pour votre aide.


    Erreur

    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
    cause mère
     
    org.apache.jasper.JasperException: Exception in JSP: /pages/welcome.jsp:40
     
    37: <h1> Bienvenue <bean:write name="LoginForm" property="username"/></h1> 
    38: 
    39: 
    40: <logic:iterate id="emp" name="LoginAction" property="mapUserInfos">
    41: 	Emp Id: <bean:write name="emp" property="key"/>
    42: 	Emp Name: <bean:write name="emp" property="value"/>
    43: </logic:iterate>	
     
     
    Stacktrace:
    	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    LoginAction.java


    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
    public class LoginAction extends Action {
     
     
    	public ActionForward execute(ActionMapping mapping, 
    			ActionForm form, 
    			HttpServletRequest request, 
    			HttpServletResponse response)throws Exception {  
     
    		Map<String, Object> mapUserInfos = new HashMap<String, Object>();
     
    		mapUserInfos.put("Rohit", new Double(3434.34));
     
    		LoginFormBean loginForm = (LoginFormBean)form;  
    		//boolean validLogin = LoginDAO.login(loginForm.getUsername(), loginForm.getPassword());  
     
    		request.setAttribute("MAP",mapUserInfos);
     
    		String resultat = null;  
     
    		if (loginForm.getUsername().equals("prenom")  && loginForm.getPassword().equals("pass")  ){
    			resultat = "welcome";  
    		}else{
    			resultat = "error";  
    		}  
     
     
    		return mapping.findForward(resultat);
    	}
    struts-config.xml

    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
    <struts-config>  
     
    	<data-sources/> 
     
    	<form-beans>  
    	 	<form-bean name="LoginForm" type="com.sample.LoginFormBean"/>  
    	</form-beans>
     
    	<global-exceptions/> 
     
    	<global-forwards>  
    		<forward name="welcome" path="/pages/login.jsp" />
    	</global-forwards>
     
    	 <action-mappings>  
    	 	<action input="/pages/login.jsp" 
    	 			name="LoginForm" 
    	 			path="/checkLogin" 
    	 			scope="session" 
    	 			type="com.sample.LoginAction">  
    	    	<forward name="welcome" path="/pages/welcome.jsp"/>  
    	    	<forward name="error" path="/pages/error.jsp"/>  
    	 	</action>  
    	 </action-mappings> 
     
    	 <controller/>
     
    	 <message-resources parameter="com.sample.MessageResources"/> 
     
     </struts-config>
    welcome.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
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
     
    <html:html>
    <head>
    <title><bean:message key="welcome.title"/></title>
    <html:base/>
    </head>
    <body bgcolor="white">
     
    <logic:notPresent name="org.apache.struts.action.MESSAGE" scope="application">
      <font color="red">
        Succes:  Bienvenue !!!! 
      </font>
    </logic:notPresent>
     
    <h3><bean:message key="welcome.heading"/></h3>
    <p><bean:message key="welcome.message"/></p>
     
    <h1> Bienvenue <bean:write name="LoginForm" property="username"/></h1> 
     
     
    <logic:iterate id="emp" name="LoginAction" property="mapUserInfos">
    	Emp Id: <bean:write name="emp" property="key"/>
    	Emp Name: <bean:write name="emp" property="value"/>
    </logic:iterate>
    </body>
    </html:html>

  2. #2
    Expert confirmé

    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
    Par défaut
    En codant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.setAttribute("MAP",mapUserInfos);
    tu mets la Map mapUserInfos dans le scope request sous le nom MAP.

    Il faut donc mettre la valeur MAP dans l'attribut name du tag logic:iterate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <logic:iterate id="emp" name="MAP">
    	Emp Id: <bean:write name="emp" property="key"/>
    	Emp Name: <bean:write name="emp" property="value"/>
    </logic:iterate>
    Pour t'y retrouver plus facilement, il serait plus logique de mettre la Map dans le scope request sous le nom mapUserInfos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.setAttribute("mapUserInfos",mapUserInfos);
    et ensuite dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <logic:iterate id="emp" name="mapUserInfos">
    	Emp Id: <bean:write name="emp" property="key"/>
    	Emp Name: <bean:write name="emp" property="value"/>
    </logic:iterate>
    Par contre, ce qui est étrange, c'est que dans ta Map, tu as mis comme clé un String et comme value un objet de type Double et dans l'affichage, tu mets que la clé correspond à l'id et la valeur au name. Ne serait-ce pas le contraire ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 21
    Par défaut
    Génial, ça marche !!
    En effet j'avais bien inversé le couple Key/value, je mettais même carrément trompé puisque j'avais besoin d'un type "Entier" et non pas d'un "Double".

    Merci à toi c_nvy

  4. #4
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 93
    Par défaut Et si on a une Map<String, List<Object>>...?
    Bonjour,
    Lorsqu'on a une Map avec des values de type String c'est bon mais si les values de la Map sont de type autre que String, celles-ci sont quand même considérées comme des String. Du coup dans le cas d'une List par exemple, l'itération est impossible dans la jsp.
    Savez vous comment gérer ce dernier cas ?
    Merci d'avance.

  5. #5
    Expert confirmé

    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
    Par défaut
    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <logic:iterate id="itemMap" name="uneMap">
    	<bean:write name="itemMap" property="key"/>
    	<logic:iterate name="itemMap" property="value" id="itemList">
    	   <bean:write name="itemList" property="unePropriete"/>
    	</logic:iterate>
    </logic:iterate>

  6. #6
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 93
    Par défaut
    Bonjour,
    Déjà merci pour votre réponse. En procédant ainsi, tout marche nickel. Je voulais éviter de parcourir toute la map alors que je recherche la valeur d'une clé en particulier. Du coup, au lieu de rajouter un logic:equal dans votre code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <logic:iterate id="itemMap" name="uneMap">
    	<logic:equal name="itemMap" property="key" value="${valeurKey}">
    		<bean:write name="itemMap" property="key"/>
    		<logic:iterate name="itemMap" property="value" id="itemList">
    		   <bean:write name="itemList" property="unePropriete"/>
    		</logic:iterate>
    	</logic:equal>
    </logic:iterate>
    j'avais plutôt directement récupéré la valeur que je souhaitais via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <bean:define id="mesValeurs" value="${uneMap[valeurKey]}" />
    Sauf que ce résultat est considéré comme une String et je ne peux itérer ensuite sur "mesValeurs".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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