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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    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 averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

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

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

  3. #3
    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
    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 averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    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 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
    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 averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    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...

+ 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