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 :

Récupérer dans une page JSF la valeur d'un méthode static avec les EL


Sujet :

JSF Java

  1. #1
    Membre actif
    Avatar de fabou3377
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 182
    Points : 280
    Points
    280
    Par défaut Récupérer dans une page JSF la valeur d'un méthode static avec les EL
    Bonjour,

    j'ai une classe FacesUtils qui me permet de mettre à disposition des méthodes pour mes pages JSF, notamment pour le context et l'adresse du serveur, celles-ci sont déclarées en static :

    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
     
        public static String getServerURL(){
            StringBuffer serverURL = new StringBuffer();
            HttpServletRequest httpRequest = (HttpServletRequest) getExternalContext().getRequest();
            String serverName = httpRequest.getServerName();
            int serverPort  = httpRequest.getServerPort();
            String protocol = httpRequest.getScheme();
            serverURL.append(protocol);
    	                serverURL.append("://");
     	                serverURL.append(serverName);
     	                if (serverPort != 0) {
     	                    if (("http".equals(protocol) && serverPort != 80)
     	                            || ("https".equals(protocol) && serverPort != 443)) {
     	                        serverURL.append(':');
     	                        serverURL.append(serverPort);
     	                    }
     	                }
     	                serverURL.append('/');
            return serverURL.toString();
        }
     
     
        public static String getContextPath(){        
             return getExternalContext().getRequestContextPath();
        }
     
        public static String getAppPath(){
            if(StringUtils.isNotEmpty(getServerURL())&& StringUtils.isNotEmpty(getContextPath())){
              return getServerURL()+getContextPath();
            }
            return "test";
        }
    Ces méthodes fonctionnent parfaitement mais je n'arrive pas récupérer les valeurs dans un pages JSF via les expressions de langages #{facesutils.contextPath}...

    Une idée?

    Merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 129
    Points : 128
    Points
    128
    Par défaut
    Vérifie la déclaration de la classe dans ton facesConfig , peut être une coquille qui traine?
    Tu as regardé en debug si ça passe bien dans le getter?

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    on accède pas aux méthodes statiques comme ça, il faut passer par une taglib mappant ta méthode sur une fonction JSF. Avec facelets c'est assez facile, mais j'ignore si tu utilise facelets.

  4. #4
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Bonjour, la suite de ce post m'intéresse,
    J'utilise Facelet, peux tu nous un exemple de déclaration d'une méthode static via facelet? et l'appel aussi.
    Merci d'avance.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    exemple simple

    1. la taglib custom
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0"?>
     <facelet-taglib xmlns="http://java.sun.com/JSF/Facelet">
         <namespace>http://mynamespace/mytaglib</namespace>
     	<function>
     		<function-name>abc</function-name>
     		<function-class>com.company.MyFunctionClass</function-class>
     		<function-signature>int length(java.lang.String)</function-signature>
     	</function>
     </facelet-taglib>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class MyFunctionClass {
        public static int length(String s) {return s==null?0:s.length();}
    }
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:t="http://myfaces.apache.org/tomahawk"
    	xmlns:montag="http://mynamespace/mytaglib"
    	>
     
     
    ......
    Longueur de chaine= #{montag:length(monBean.unString)}

  6. #6
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Ca passe pas tchize_, voila ma conf :
    taglib :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <function>
         <function-name>getVersion</function-name>
         <function-class>mon_package.ConfigAll</function-class>
         <function-signature>java.lang.String getVersion()</function-signature>
        </function>
    fonction java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     public static String getVersion() {
    	    return getAppliValue(ConstantDivers.APPLI_KEY_VERSION);
    }
    L'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:ui="http://java.sun.com/jsf/facelets"      
          xmlns:rich="http://richfaces.org/rich"
          xmlns:a4j="http://richfaces.org/a4j"
          xmlns:montag="http://mynamespace/mytaglib"   
          xmlns:muc="http://www.epide.fr/muComponents">
    ...
    <h:outputFormat value="Orange plateform : #{montag:getVersion()}" styleClass="dockHeaderTextContent" />
    Qu'est ce qui manque?
    Et autre question à quoi sert l'élément <function-name> puisque tu t'en es pas servi lors de ton appel?
    Merci d'avance.

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    je vois rien qui manque, quel message d'erreur?

    Aussi, j'ai été trop vide dans mon copier/coller. On aurait du mettre abc dans mon EL et non length. Le function-name c'est le nom à utiliser dans les EL.

  8. #8
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Voila l'erreur que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    aused by: javax.el.ELException: Function 'montag:getVersion' not found
    	at org.jboss.el.lang.ExpressionBuilder.visit(ExpressionBuilder.java:176)
    	at org.jboss.el.parser.SimpleNode.accept(SimpleNode.java:129)
    	at org.jboss.el.parser.SimpleNode.accept(SimpleNode.java:132)
    	at org.jboss.el.parser.SimpleNode.accept(SimpleNode.java:132)
    	at org.jboss.el.lang.ExpressionBuilder.prepare(ExpressionBuilder.java:138)
    	at org.jboss.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:152)
    	at org.jboss.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:195)
    	at org.jboss.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:68)
    	at com.sun.facelets.tag.TagAttribute.getValueExpression(TagAttribute.java:256)
    	... 76 more
    Il dit qu'il ne voit pas ma fonction getVersion.

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    je crois qu'il ne vois surtout pas ta taglib, sinon il dirait qu'il n'y a pas de méthode getVersion dans le le namespace machin.


    Est-ce que les autre éléments de ta taglib sont accessible? Où as-tu placé le fichier de taglib?

  10. #10
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    mon fichier de taglib est à la racine de WEB-INF et bien visible car j'ai des composants déclarés. voila son contenu :
    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
     
    <?xml version="1.0"?>
    <!DOCTYPE facelet-taglib PUBLIC
      "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
      "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
    <facelet-taglib>
    	<namespace>http://www.site.fr/muComponents</namespace>
    	<tag>
    		<tag-name>calendrier</tag-name>
    		<source>../composants/calendrier.xhtml</source>
    	</tag>
    	...
        <tag>
        	<tag-name>muPanel</tag-name>
        	<source>../composants/muPanel.xhtml</source>
        </tag>
        <function>
         <function-name>getVersion</function-name>
         <function-class>fr.msw.config.ConfigAll</function-class>
         <function-signature>java.lang.String getVersion()</function-signature>
        </function>
    </facelet-taglib>
    J'ai peut être merdé dans la declaration de la fonction statique? ca ne devrait pas être dans une balise tag aussi ?

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    ce n'est pas la taglib que tu as utilisé pour ton EL. Dans l'EL tu utilise montag, qui correspond à http://mynamespace/mytaglib mais tu as déclaré ta fonction dans la taglib http://www.site.fr/muComponents



    Donc au final, ton EL aurai tu etre #{muc:getVersion()}

  12. #12
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Ok parfait c résolu, c'etait le nom de mon tag name qui n'etait pas bon.
    Merci beaucoup .

  13. #13
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Oui en effet, t'as bien vu tchize_.
    Merci

Discussions similaires

  1. Integrer un taglib dans une page jsf
    Par Sun03 dans le forum JSF
    Réponses: 23
    Dernier message: 28/04/2008, 11h23
  2. Réponses: 3
    Dernier message: 19/04/2008, 17h32
  3. JfreeChart dans une page jsf
    Par hicham.gi dans le forum JSF
    Réponses: 4
    Dernier message: 10/04/2008, 16h02
  4. "Affichage conditionnel" dans une page JSF
    Par Niniz dans le forum JSF
    Réponses: 2
    Dernier message: 19/07/2007, 12h14
  5. Réponses: 6
    Dernier message: 02/04/2007, 19h13

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