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

Taglibs Java Discussion :

Faire un forEach sur un objet pour construire un select [JSTL]


Sujet :

Taglibs Java

  1. #1
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 023
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 023
    Points : 1 786
    Points
    1 786
    Par défaut Faire un forEach sur un objet pour construire un select
    Bonjour,

    Je souhaiterais remplir dynamiquement un select avec JSTL.

    Sous Struts, dans mon fichier action, je recupère des données en base. Je les stockes dans un liste de classe Commercial et les envoie au fichier JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<Commercial> com = dataBase.List_Commercial();
    request.setAttribute("commercial", com);
    Et apparrement les données sont bien présentes en mode debug lorsque je mets un point d'arret dans l'action :



    Je recupère la liste sous forme d'Iterateur dans ma JSP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <% @SuppressWarnings("unchecked")
        Iterable<Commercial> commercial = (Iterable<Commercial>) request.getAttribute("commercial");
    %>
    Et voici mon combobox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	<select name="drinkName" id="drinkName">
    		<c:forEach var="p" items="commercial">
    			<option value="${p.firstName}">${p.firsName}</option>
    		</c:forEach>
    	</select>

    Mais malheuresement les valeurs ne sont pas interprétés :


    firstName est un attribut de la classe commercial. Je l'ai mis en public à tout hasard ...

    J'ai trouvé un exemple sur comment utiliser forEach sur un objet quelconque :
    http://enseignement.insset.u-picardi...controle2.html

    Je ne comprends pas ou j'ai merdouillé :-(

  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
    Alors, déjà, c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	<c:forEach var="p" items="${commercial}">
    Ensuite, dans ta jsp, récupère l'objet commercial sous forme de List tout simplement.

    Et si au final, les EL ne sont pas interprétées, cela signifie que tu n'es pas en J2EE 1.4.

    Dans ce cas, tu peux utiliser le tag c:out :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <select name="drinkName" id="drinkName">
    	<c:forEach var="p" items="${commercial}">
    		<option value='<c:out value="${p.firstName}"/>'><c:out value="${p.firstName}"/></option>
    	</c:forEach>
    </select>
    Modératrice Java - Struts, Servlets/JSP, ...

  3. #3
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 023
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 023
    Points : 1 786
    Points
    1 786
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Alors, déjà, c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	<c:forEach var="p" items="${commercial}">
    Ensuite, dans ta jsp, récupère l'objet commercial sous forme de List tout simplement.
    oki. Je m'étais basé sur l'exemple sur cet page : http://enseignement.insset.u-picardi...controle2.html
    qui montre lire une collection d'objet avec un Iterateur et un forEach...

    Mais si tu le dis, je m'execute
    Ma nouvelle entete de la JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <%@ page import="java.util.List" %>
     
    <% @SuppressWarnings("unchecked")
        List<Commercial> commercial = (List<Commercial>) request.getAttribute("commercial");
     
    %>
    et ceci que j'avais oublié (c'est pour cette raison que je n'avais qu'un élément dans le combobox)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

    Et en passant par ta méthode, cela fonctionne maintenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <select name="drinkName" id="drinkName">
    	<c:forEach var="p" items="commercial">
    		<option value='<c:out value="${p.firstName}"/>'><c:out value="${p.firstName}"/></option>
    	</c:forEach>
    </select>



    Citation Envoyé par c_nvy Voir le message
    Et si au final, les EL ne sont pas interprétées, cela signifie que tu n'es pas en J2EE 1.4.
    Cela signifie que j'ai une ancienne version ?
    parce que passé par des c:out, je trouve cela moins éléguant.
    Je pensais etre en J2SE5 et meme en version J2SE6
    Suis je donc pas à jour ?

    Mon paneau Ajout/suppression de programme :

  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
    J'ai modifié le code que je t'avais donné avec le c:out parce qu'en faisant copier/coller de ton code, j'avais oublié de corriger le items="${commercial}".
    Donc, vérifie que tu l'as bien codé comme ça.

    Quant à la version de J2EE, peux-tu montrer le début de ton web.xml et préciser quel serveur d'application tu utilises et sa version ?
    Modératrice Java - Struts, Servlets/JSP, ...

  5. #5
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 023
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 023
    Points : 1 786
    Points
    1 786
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    J'ai modifié le code que je t'avais donné avec le c:out parce qu'en faisant copier/coller de ton code, j'avais oublié de corriger le items="${commercial}".
    Donc, vérifie que tu l'as bien codé comme ça.
    J'ai juste fais un copié collé de la balise option. Donc pas de souci sur ce coté la



    Citation Envoyé par c_nvy Voir le message
    Quant à la version de J2EE, peux-tu montrer le début de ton web.xml et préciser quel serveur d'application tu utilises et sa version ?
    J'utilise Tomecat 6.


    Une partie du fichier web.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
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
    <!DOCTYPE web-app
      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
      "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
     
    <web-app>
      <display-name>Struts Blank Application</display-name>
     
      <!-- Standard Action Servlet Configuration (with debugging) -->
      <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>2</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>2</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
      </servlet>

  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
    Comme Tomcat 6 supporte les servlets 2.5 et JSP 2.1, soit JEE 5, il faut modifier le début de ton web.xml.

    Remplace ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <!DOCTYPE web-app
      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
      "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
     
    <web-app>
    par celui-ci :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://java.sun.com/xml/ns/javaee"
    	xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    	version="2.5">
    Ensuite, il faut que tu télécharges la JSTL 1.2 qui est compatible JEE 5 et que tu copies les jars dans ton projet.

    Et enfin, il faut modifier l'uri de la JSTL dans la directive taglib comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    et là, tu pourras utiliser des EL directement dans ta jsp sans utiliser le tag c:out.
    Modératrice Java - Struts, Servlets/JSP, ...

  7. #7
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 023
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 023
    Points : 1 786
    Points
    1 786
    Par défaut
    Merci cela fonctionne ..

    Je vais donner le lien direct parce que j'ai eu énorme de mal à trouver le JSTL 1.2 cela pourra servir à d'autre personne. Je ne l'ai pas trouvé ni sur le site de Tomcat ni sur Sun la dernier version 1.2

    Le voici : http://www.java2s.com/Code/Jar/geron...tl-1.2.jar.htm

    Je donc copié le jar dans : webapps\Mon_Application\WEB-INF\lib\
    modifier le web.xml
    et changer l'uri...

    Juste une dernière petite questio :
    Est ce génant d'avoir un URI qui pointe vers l'exterieur : "http://java.sun.com/jsp/jstl/core" ?
    Cela ne rallentie pas l'application ?

  8. #8
    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
    C'est sympa d'avoir donné le lien.
    ça peut effectivement servir à d'autres.

    Bon sinon, l'uri ne pointe pas vers l'extérieur.
    En spécifiant cette uri, il va automatiquement lire la tld c.tld présente dans le répertoire META-INF du jar standard.jar.
    Modératrice Java - Struts, Servlets/JSP, ...

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

Discussions similaires

  1. [AC-2003] Faire SOMME.SI sur une requête pour produire un etat
    Par christophesav dans le forum IHM
    Réponses: 2
    Dernier message: 12/12/2011, 01h49
  2. Nombre de session sur un objet pour un schéma
    Par debdba dans le forum Oracle
    Réponses: 3
    Dernier message: 08/06/2010, 22h28
  3. Réponses: 4
    Dernier message: 29/08/2009, 19h16
  4. Réponses: 2
    Dernier message: 14/01/2009, 09h55
  5. Requete sur table récursive pour construire arbre
    Par dacid dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 13/06/2006, 17h17

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