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 :

Lier des tags c:forEach imbriqués aux class de la servlet [JSTL]


Sujet :

Taglibs Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 44
    Points
    44
    Par défaut Lier des tags c:forEach imbriqués aux class de la servlet
    Bonsoir !!

    J'ai un problème avec une page JSP qui contient le tableau suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <table>
      <tr>
        <c:forEach items="${phaseaff}" var="varphase">
            <td><c:out value="${varphase.namePhase}"/></td>
            <c:forEach items="${horphase}" var="phaseheure">
              <td>
                  <input type="text" value="<c:out value="${phaseheure.phahoraff}"/>"/>
                  <input type="text" value="<c:out value="${phaseheure.phahortxt}"/>"/>
              </td>
            </c:forEach>
        </c:forEach>
      </tr>
    </table>
    Je désire y afficher les 2 class suivantes :
    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
    import java.util.List;
     
    public class Phase {
    	private String namePhase;
    	private int idPhase;
    	private List<HeurePhase> listHeurePhase;
     
    	public String getNamePhase() {
    		return namePhase;
    	}
    	public void setNamePhase(String namePhase) {
    		this.namePhase = namePhase;
    	}
    	public int getIdPhase() {
    		return idPhase;
    	}
    	public void setIdPhase(int idPhase) {
    		this.idPhase = idPhase;
    	}
    	public List<HeurePhase> getListHeurePhase() {
    		return listHeurePhase;
    	}
    	public void setListHeurePhase(List<HeurePhase> listHeurePhase) {
    		this.listHeurePhase = listHeurePhase;
    	}	
    }
    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
    public class HeurePhase {
    	private String phasehoraff;
    	private String phasehortxt;
     
    	public String getHorPhaff() {
    		return phasehoraff;
    	}
    	public void setHorPhaff(String phasehoraff) {
    		this.phasehoraff = phasehoraff;
    	}
    	public String getHorPhtxt() {
    		return phasehortxt;
    	}
    	public void setHorPhtxt(String phasehortxt) {
    		this.phasehortxt = phasehortxt;
    	}
    }
    Voici le code de la servlet:
    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
     
    List<Phase> listPhase = new ArrayList<Phase>();
    List<HeurePhase> HeuresPhase = new ArrayList<HeurePhase>();
     
    Statement stmt1 = connection.createStatement();
    ResultSet resultp = stmt1.executeQuery("SELECT Descr, ID FROM phase");
     
    while (resultp.next()) {
      Phase p = new Phase();
      p.setNamePhase(resultp.getString(1));
      p.setIdPhase(resultp.getInt(2));
     
      for (int k = 0; k < 10; k++) {
     
        Statement stmt2 = connection.createStatement();
        ResultSet resulth = stmt2.executeQuery("SELECT Plan_Heure, Plan_Date FROM planification;");
     
        String Heure = "0";
        if (resulth.next()) {
          Heure = resulth.getString(1);
          Date = resulth.getString(2);
        }
        stmt2.close();
     
        HeurePhase hp1 = new HeurePhase();
        hp1.setHorPhaff(Heure);
        hp1.setHorPhtxt(Date);
        HeuresPhases.add(hp1);
        }
        p.setListHeurePhase(HeuresPhase);
      }
      listPhase.add(p);
     
    request.getSession().setAttribute("phaseaff", listPhase);
    request.getSession().setAttribute("horphase", HeuresPhase);
    Lorsque je charge ma page, ça se plante et je ne comprends pas pourquoi...

    Qui peut éclairer ma lanterne ??

    Bonne soirée !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 44
    Points
    44
    Par défaut
    Une précision: environnement Eclipse + Tomcat !

    Et je teste ça avec le browser interne...

  3. #3
    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
    D'après le code de la servlet, tu constitues une collection d'objets Phase dont une des propriétés est aussi une collection.
    Il n'est donc pas utile de mettre les deux collections dans le scope.

    Sinon, dans la jsp, tu dois référencer la sous-liste listHeurePhase dans le deuxième c:forEach et listHeurePhase étant une propriété de l'objet Phase, tu dois la préfixer par la variable spécifiée dans l'attribut var du premier c:forEach comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <table>
      <tr>
        <c:forEach items="${phaseaff}" var="varphase">
            <td><c:out value="${varphase.namePhase}"/></td>
            <c:forEach items="${varphase.listHeurePhase}" var="phaseheure">
              <td>
                  <input type="text" value='<c:out value="${phaseheure.phahoraff}"/>'/>
                  <input type="text" value='<c:out value="${phaseheure.phahortxt}"/>'/>
              </td>
            </c:forEach>
        </c:forEach>
      </tr>
    </table>

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 44
    Points
    44
    Par défaut
    Bonjour c_nvy !

    J'ai effectué ls modifications et le texte de la console a changé:

    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
     
    An exception occurred processing JSP page /applic/Listeprestation.jsp at line 181
     
    178: 						<td><c:out value="${varphase.namePhase}"/></td>
    179: 						<c:forEach items="${varphase.listeHeurePhase}" var="phaseheure">
    180: 							<td align="center" valign="middle">
    181: 								<input type="text" value="<c:out value="${phaseheure.phasehoraff}"/>" size="2"/>
    182: 							</td>
    183: 						</c:forEach>
    184: 				</c:forEach>
     
    Stacktrace:
    17.01.2009 20:06:53 org.apache.catalina.core.ApplicationDispatcher invoke
    SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
    javax.el.PropertyNotFoundException: Property 'phasehoraff' not found on type prestation.servlet.HeurePhase
    J'ai changé quelques noms pour les rendre plus lisibles pour moi et j'ai supprimé une des deux lignes dans la boucle pour simplifier le traitement.

    Ce qui me surprend dans l'exception levée à la ligne 181, c'est que cette exception est "Propriété non trouvée" alors que phasehoraff existe bien dnas HeurePhase.
    Cela signifie t il que l'adressage est faux ?

  5. #5
    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
    Je n'avais pas fait attention mais les getters et setters sont faux dans HeurePhase.
    La propriété s'appelle phasehoraff. Il faut donc nommer le getter getPhasehoraff et le setter setPhasehoraff.
    Idem pour phasehortxt avec getPhasehortxt et setPhasehortxt.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Je n'avais pas fait attention mais les getters et setters sont faux dans HeurePhase.

    Mea culpa, je n'ai pas vu cette erreur...

    J'ai fait des copier-coller pour créer la class et je n'ai pas été assez attentif à controler le code...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 44
    Points
    44
    Par défaut
    Bonsoir !

    Effectivement, avec des noms corrects, ça va mieux !!

    Mais j'ai un drôle de problème:
    j'ai une table avec 3 phases comprenant chacune 10 enregistrements.

    Lorsque la table est affichée dans la JSP, chaque ligne affiche l'entier de la table.
    C'est à dire que la ligne 1 qui ne devrait afficher que la phase 1 affiche toutes les heures de la phase 1 puis les heures de la phase 2 et finalement les heures de la phase 3.
    Et les lignes 2 et 3 affichent elles aussi les même indications comme si le tri par phase n'avait pas lieu...

    Quel paramètre ai-je oublié ?

    Est ce une erreur dans la servlet, par exemple, la sauvegarde dans les ListArray est fausse ?
    Est ce une erreur dans la JSP, par exemple la sélection des phases est fausse ou omise ?

    Bonne soirée !

  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
    Il y a effectivement un problème dans ton code.
    Il faut que tu crées une nouvelle instance de la List HeuresPhase à chaque nouvelle phase :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    List<Phase> listPhase = new ArrayList<Phase>();
    List<HeurePhase> HeuresPhase = null ;
     
    Statement stmt1 = connection.createStatement();
    ResultSet resultp = stmt1.executeQuery("SELECT Descr, ID FROM phase");
     
    while (resultp.next()) {
      Phase p = new Phase();
      HeuresPhase = new ArrayList<HeurePhase>();
      ...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Points : 44
    Points
    44
    Par défaut
    Bonjour et merci !

    Effectivement, maintenant tout marche à la perfection !!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/06/2013, 17h40
  2. Des tag s:iterator imbriqués
    Par CompteHamza dans le forum Struts 2
    Réponses: 1
    Dernier message: 29/08/2012, 10h53
  3. Lier des composants graphique aux attributs d'une classe
    Par galeo27 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/11/2009, 17h52
  4. [XL-2003] Lier des évennements aux différents choix d'un Message Box
    Par Mas_Carpone dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/10/2009, 14h38
  5. Lier des classes
    Par Premium dans le forum Langage
    Réponses: 4
    Dernier message: 16/04/2006, 10h19

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