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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    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 confirmé
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    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 confirmé
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    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 !

Discussions similaires

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

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