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

JSF Java Discussion :

Accès aux variables statiques dans une page JSF / XHTML


Sujet :

JSF Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut Accès aux variables statiques dans une page JSF / XHTML
    Bonjour,

    Tout est dans le titre. Je veux faire un truc de ce genre :

    Classe contenant ma variable statique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class MesConstantes {
          public static final String MA_VARIABLE = "qq chose";
    }
    Accès à ma variable dans la page test.xhtml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8" ?>
    
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:c="http://java.sun.com/jstl/core"
    	xmlns:rich="http://richfaces.org/rich"
    	xmlns:a4j="http://richfaces.org/a4j">
           ...
           <h:outputText value="#{MesConstantes.MA_VARIABLE}" />
           ...
    </ui:composition>
    Certains proposent de passer par des getters dans le bean et d'y retourner la variable statique mais y a-t-il que ça comme solution ?

    Solution avec getter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @ManagedBean(name="monBean")
    public class ManagedBean {
     
          ...
          public String getVar() {
                 return MesConstantes.MA_VARIABLE;
          }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8" ?>
    
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:c="http://java.sun.com/jstl/core"
    	xmlns:rich="http://richfaces.org/rich"
    	xmlns:a4j="http://richfaces.org/a4j">
           ...
           <h:outputText value="#{monBean.var}" />
           ...
    </ui:composition>
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Tu ne peux effectivement pas y accèder sans passer par un getter. C'est une limitation de la syntaxe des expressions EL...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par romaintaz Voir le message
    Tu ne peux effectivement pas y accèder sans passer par un getter. C'est une limitation de la syntaxe des expressions EL...
    Eh ben zut alors ! C'est quand même bizarre que JSF ne propose pas une solution élégante.
    En tout cas merci pour ta réaction.

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    JSF n'y est pour rien, ce sont les EL qui sont ici en cause...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Pour rajouter une couche : il faudrait en fait que le langage EL supporte une syntaxe spécifique pour accéder à une constante d'un bean. En effet, si on prend ce code :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{monBean.MA_VALEUR}"/>

    et que dans ton bean tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static final String MA_VALEUR = "42";
     
    public String getMA_VALEUR() {
        return "41";
    }
    alors il y aurait confusion, car JSF (l'EL en fait) ne saurait quelle méthode ou champ accéder...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  6. #6
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Même si cela n'est que pure discussion (EL n'y a pas pensé ou du moins n'offre pas de solution), une solution simple au problème que tu soulèves serait :

    Si je (EL) rencontre une expression de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{monBean.MA_VALEUR}"/>
    Alors je cherche un getter de la variable MA_VALEUR (soit getMA_VALEUR) dans le bean :
    Si je (EL) trouve alors je retourne la valeur fournie (au return).
    Sinon, je (EL) vérifie s'il n'y a pas de variable statique correspondant à MA_VALEUR dans le bean :
    Si je (EL) la trouve alors je retourne sa valeur.
    Sinon, je (EL) déclenche une exception de PropertyNotFound.
    Fin

    Et de là, ton exemple retournerait "41". Ce qui est mieux que rien !

    Ca devrait faire l'affaire à mon avis !

  7. #7
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Franchement, je suis content que le comportement des EL ne soit pas comme ça
    Pour moi, le fait d'avoir "soit l'un, soit l'autre, en fonction du contexte" est source d'erreur énorme, car si jamais tu fais une typo, du refactoring ou autre, tu risques de mettre un moment avant de t'en apercevoir.

    Maintenant, rien ne t'empêche d'utiliser une autre librairie pour gérer les EL, comme par exemple EL Functors, qui gère les appels aux variables statiques de classe (là, en utilisant une syntaxe un peu particulière, à savoir class.<NomCompletDeLaClasse>.<NOM_DU_CHAMP>):

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{class.com.toto.MaClasse.MON_CHAMP}"/>
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  8. #8
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par romaintaz Voir le message
    Maintenant, rien ne t'empêche d'utiliser une autre librairie pour gérer les EL, comme par exemple EL Functors, qui gère les appels aux variables statiques de classe :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:outputText value="#{class.com.toto.MaClasse.MON_CHAMP}"/>
    Là ça m'intéresse. Par contre , je veux intégrer la lib à mon projet maven 2 mais je trouve pas les config à mettre au niveau du pom.xml. Si jamais t'as une piste, je suis preneur. En attendant je continue à chercher !

    Merci pour ton aide

  9. #9
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Il suffit de mettre :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        <dependency>
          <groupId>org.expressionlanguage</groupId>
          <artifactId>el-functors</artifactId>
          <version>1.0.2</version>
        </dependency>

    sauf que je ne sais plus quel est le repository à configurer pour ça Au pire, tu télécharges le .JAR, puis tu le deploie sur ton repository global...

    Il y a aussi une configuration à changer dans le faces-config.xml :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        <application>
            ...
            <el-resolver>beanface.el.functor.FunctorELResolver</el-resolver>

    Mais bon, est-ce vraiment la peine d'utiliser un autre ELResolver juste pour ça ?
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  10. #10
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    A noter aussi que cette librairie n'est plus maintenue depuis 3 ans
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/04/2007, 20h13
  2. Réponses: 3
    Dernier message: 27/11/2006, 15h16
  3. Réponses: 14
    Dernier message: 05/09/2006, 02h17
  4. [Tableaux] Probleme variable statique dans une classe
    Par Joe Le Mort dans le forum Langage
    Réponses: 7
    Dernier message: 31/08/2006, 12h35
  5. un menu statique dans une page
    Par dark_vidor dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/07/2006, 00h19

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