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 :

Accès aux méthodes d'une classe [JSTL]


Sujet :

Taglibs Java

  1. #1
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut Accès aux méthodes d'une classe
    Bonjour à tous,

    J'aimerais si possible que vous m'aidiez à bien comprendre de A à Z comment se passe l'accès aux méthodes via JSTL (1.0)

    J'ai une classe MonObjet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class MonObjet
    {
      private nom;
      private isVDP=false;
      public MonObjet() {}
      public String getNom() { return this.nom;}
      public void setNom(String nom) { this.nom=nom;}
      public void setVDP(boolean b) { isVDP = b;}
      public boolean isVDP() { return isVDP;}
    }
    Dans ma JSP, lorsque je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <c:out value="${monInstance.nom}"/>
    Un appel à la méthode getNom() est envoyé.

    Maintenant dans ma JSP, je veux appeler la méthode isVDP(), j'ai du faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <c:if test="${VDP}">
     OK VDP vaut true
    </c:if>
    Alors que ma variable ne s'appele même pas VDP mais isVDP.

    Comment fait-il le lien ? Pourriez-vous m'expliquer et/ou me dire où je me trompe ?
    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 342
    Points
    342
    Par défaut
    Salut,

    Il cherche les getters correspondant (avec les conventions javabean) donc si tu lui passe "VDP" il cherche "getVDP" et "isVDP" qu'il trouve.

    Si tu lui passe isVDP par contre il va chercher getIsVDP etisIsVDP => ça ne fonctionnera pas.

  3. #3
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    Donc peu importe le nom de ma variable dans la classe?

    Et si je veux lui passer un paramètre ou appeler un constructeur?

  4. #4
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    Ohh en faisant un test..

    Je peux remplacer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <%
     PersoClass pc=(session.getAttribute("newPC")!=null)
       			?(PersoClass)session.getAttribute("newPC"):new PersoClass();
    %>
    Par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <c:set var="pc" value="${sessionScope['newPC']}"/>
    <c:if test="${empty sessionScope['newPC']}">
    	<jsp:useBean id="pc" class="pjx.classes.util.PersoClass">
    	</jsp:useBean>
    </c:if>
    Est-ce propre de cette manière?

    Par contre, je n'arrive pas à trouver l'équivalent de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pc.getDateEntret().get(Calendar.MINUTE)
    getDateEntret() me renvoit un "GregorianCalendar"..

    D'avance, merci!

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par libuma Voir le message
    Donc peu importe le nom de ma variable dans la classe?
    Oui... mais non
    Effectivement le nom de ton attribut n'a pas une grande importance pour les ELs. Mais la bonne pratique veut que les getters/setters correspondent toujours à une variable => à la variable toto, on associera getToto() ou isToto() et setToto(...).
    De plus certaines API utilisent l'introspection pour accéder directement à l'attribut, du coup sans utiliser les conventions de noms "classiques", on se retrouve vite avec des incompatibilités...

    Citation Envoyé par libuma Voir le message
    Et si je veux lui passer un paramètre ou appeler un constructeur?
    De mémoire les expressions de langages ne peuvent pas invoquer de méthodes avec des paramètres (en gros elles sont faites pour utiliser des getters).

    Citation Envoyé par libuma Voir le message
    Ohh en faisant un test..

    Je peux remplacer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <%
     PersoClass pc=(session.getAttribute("newPC")!=null)
       			?(PersoClass)session.getAttribute("newPC"):new PersoClass();
    %>
    Par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <c:set var="pc" value="${sessionScope['newPC']}"/>
    <c:if test="${empty sessionScope['newPC']}">
    	<jsp:useBean id="pc" class="pjx.classes.util.PersoClass">
    	</jsp:useBean>
    </c:if>
    Est-ce propre de cette manière?
    C'est relatif, certains de diront que non : il te faut 2 * plus de lignes pour faire la même chose. moi je trouve ça plus propre : dans la jsp (ou la page jsf) seulement des tags, pas de code java.


    Citation Envoyé par libuma Voir le message
    Par contre, je n'arrive pas à trouver l'équivalent de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pc.getDateEntret().get(Calendar.MINUTE)
    getDateEntret() me renvoit un "GregorianCalendar"..
    Pas de solutions magiques... Perso j'ai tendance à ajouter un getter dans mon bean du style "getMinuteEntret()" et après ça doit passer avec des ELs.

  6. #6
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    Citation Envoyé par gailuris Voir le message
    Pas de solutions magiques... Perso j'ai tendance à ajouter un getter dans mon bean du style "getMinuteEntret()" et après ça doit passer avec des ELs.
    Oui c'est ce que j'ai fait.
    Mais alors on se retrouve vite avec un Bean qui comporte beaucoup de méthodes o_O.

    Je trouve ça dommage qu'on ne puisse pas passer de paramètres, ça bloque pas mal de portes

    Merci beaucoup à toi pour toutes ces réponses.

  7. #7
    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
    Citation Envoyé par libuma Voir le message
    Je trouve ça dommage qu'on ne puisse pas passer de paramètres, ça bloque pas mal de portes
    Il est possible de passer un paramètre par exemple dans le cas suivant :

    Si ton objet a une méthode getPropriete(String unString), tu dois pouvoir coder ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:out value="${propriete['valeur1']}" />
    Par contre, dans le cas de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pc.getDateEntret().get(Calendar.MINUTE)
    je ne vois pas d'autre solution que de créer une méthode comme te l'as indiqué gailuris.
    Modératrice Java - Struts, Servlets/JSP, ...

  8. #8
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    Merci à vous

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

Discussions similaires

  1. Acces aux méthodes d'une Classe
    Par Sunchaser dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/08/2010, 21h51
  2. Réponses: 5
    Dernier message: 01/02/2007, 13h14
  3. Problème d'accès aux méthodes d'une classe
    Par RR instinct dans le forum Langage
    Réponses: 5
    Dernier message: 26/06/2006, 14h51
  4. Réponses: 38
    Dernier message: 16/02/2005, 02h03
  5. [TOMCAT] JSP problème d'accès aux méthodes d'une classes
    Par gunnm dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 22/05/2004, 14h02

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