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 :

modifier la valeur d'un <h:outputLink>


Sujet :

JSF Java

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Par défaut modifier la valeur d'un <h:outputLink>
    Bonsoir

    Je cherche à modifier l'url et le nom d'un outputLink en fonction du type d'utilisateur connecté sur mon site.

    J'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <h:outputLink value="#{UserManager.renderTicketsLink}">
              <h:outputText value="#{UserManager.renderTicketsLinkDisplay}" />
    </h:outputLink>
    Les deux méthodes utilisées retournent une String différente en fonction du type d'instance de l'utilisateur connecté.. Quand je teste la page web, j'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.ServletException: /templates/loggedTemplate.xhtml @36,84 value="#{UserManager.renderTicketsLink}": The class 'com.myapp.controllers.UserManager' does not have the property 'renderTicketsLink'.
    Du coup je me demande si ce que je souhaite faire est réalisable? Peut-on utiliser les méthodes d'une managed-bean dans les propriétés des composants JSF et sinon, comment je peux faire autrement?

    Merci par 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 : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Citation Envoyé par p1xl_01 Voir le message
    Du coup je me demande si ce que je souhaite faire est réalisable? Peut-on utiliser les méthodes d'une managed-bean dans les propriétés des composants JSF
    Heureusement que oui !! Sinon JSF ne servirait pas à grand chose

    Le problème que tu rencontres est assez simple à corriger. L'erreur est la suivante :

    The class 'com.myapp.controllers.UserManager' does not have the property 'renderTicketsLink'

    Cela signifie que ta classe UserManager ne contient pas de getter pour la propriété renderTicketsLink. Ta classe doit en effet proposer la méthode public String getRenderTicketsLink() { ... } ce qu'elle ne doit pas faire actuellement...
    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é

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Par défaut
    Bonjour et merci pour ta réponse

    J'avais bien compris le message d'erreur mais justement, renderTicketsLink n'est pas une propriété mais une méthode. Je pensais pouvoir utiliser une méthode de ma managed bean pour rendre la valeur de mon lien dynamique mais apparemment, on ne peut mettre que des propriétés de managed bean dans les expressions EL ?!

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 55
    Par défaut
    Citation Envoyé par p1xl_01 Voir le message
    mais apparemment, on ne peut mettre que des propriétés de managed bean dans les expressions EL ?!
    Non, on peut appeler les méthodes aussi,
    Si ta méthode ne contient pas de paramètres, essaye ça : "#{UserManager.renderTicketsLink()}"

    Il faut toujours penser à copier le code source et les versions de lib que tu utilise pour qu'on puisse bien t'aider.

  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 : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Alors première chose : le value dans les <h:commandXXX> permet de définir le texte affiché sur le lien / bouton, et non pas l'action liée. Du coup, c'est inutile d'inclure un <h:outputText>, car c'est redondant.

    Si tu veux faire un lien, il te faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandLink value="#{monBean.monTexte}" action="#{monBean.monAction}"/>
    Tu noteras que <h:outputLink> ne dispose pas d'attribut action ou actionListener, et c'est normal. En effet, ce composant va générer une balise <a href="..."> en HTML, et ne te permettra pas d'intéragir avec le cycle de vie de JSF. Cela peut être utile pour proposer un lien vers l'extérieur de ton site. Si tu souhaites gérer une navigation interne à ta webapp, alors il te faudra opter pour un <h:commandLink>.
    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é

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Par défaut
    Merci =)

    Ça fonctionne bien comme ça. J'ai essayé les deux méthodes : deux outputlink avec une condition sur le rendered et un commandLink avec une action et une value conditionnées via un managed-bean. J'ai gardé la seconde, c'est plus logique et plus propre

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

Discussions similaires

  1. [XSL] Comment modifier la valeur d'une variable?
    Par sorcer1 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/02/2010, 13h26
  2. Réponses: 3
    Dernier message: 04/01/2006, 20h53
  3. Modifier la valeur d'un champ
    Par MJEFF dans le forum Access
    Réponses: 10
    Dernier message: 06/10/2005, 10h59
  4. Modifier la valeur d'un champ en fonction d'une autre...
    Par venividivici dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 25/08/2005, 14h28
  5. [C#] Modifier une valeur dans une DataTable
    Par Scorff dans le forum ASP.NET
    Réponses: 2
    Dernier message: 23/05/2005, 10h45

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