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 :

Transmettre un attribut à un managed bean


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2
    Par défaut Transmettre un attribut à un managed bean
    Bonjour,

    J'ai un problème avec les valeurs passées à mon backing bean. J'ai une liste dans laquelle j'utilise un commandLink en regard de chaque élément, pour permettre de modifier l'élément. Le lien ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <h:commandLink immediate="true" action="edit" actionListener="#{userMod.editAction}">
        <img src="edit.gif" border="0" />
        <f:attribute name="user_id" value="#{item.user_id}" />
    </h:commandLink>
    On se trouve dans une dataTable, item est un élément du tableau.
    L'idée serait de récupérer la valeur "user_id" comme attribut dans la méthode servant d'actionListener, ce qui ne pose aucun problème en soi, mais avec le managed bean contenant item en portée request, ce qui est transmis comme attribut est incorrect.
    En effet, l'instance du bean utilisée pour générer la dataTable n'existe plus lors de l'appel du commandLink, et l'appel à #{item.user_id} renvoie 0.

    Si j'utilise une portée session pour le bean, tout fonctionne sans problème. Mais je me dis qu'il doit exister une solution pour le garder en portée request, la valeur que je désire passer en paramètre étant bien présente sur la page quand on la visualise. C'est à la "sortie" de la page (par le commandLink), que l'EL #{item.user_id} est évalué à nouveau, et le bean n'existant plus, il donne une valeur par défaut. En quelque sorte, j'aimerais qu'il n'y ait pas cette évaluation.

    Ou alors, il doit exister d'autres moyens de passer un paramètre venant d'un managed bean (portée request) à une méthode actionListener ? Je suis à cours d'idée...

    Toute suggestion est la bienvenue.
    Merci.

  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
    Bonjour à toi,

    Dans la FAQ, il y a 3 méthodes (ici, ici et ici) pour récupérer l'élément d'une table affichée sur la ligne où l'utilisateur a cliqué sur un lien / bouton.

    Cela résoudrait ton problème du coup, non ?
    Ou alors j'ai pas bien saisi ton problème
    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
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2
    Par défaut
    Super ! Navré de ne pas l'avoir vu dans la FAQ mais je focalisais sur le passage d'un seul attribut et pas spécialement d'une ligne de dataTable.

    En outre, il y a une incohérence dans http://java.developpez.com/faq/jsf/?...le_active_row2 qui est la méthode que j'ai choisie (ça a l'air d'être la plus simple).

    En effet dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void selectionneElement(ActionEvent evt) {
        // On récupère la datatable.
        HtmlDataTable table = (HtmlDataTable) evt.getSource();
        // On récupère l'objet affiché à la bonne ligne de la datatable.
        Object o = table.getRowData();
        // On récupère aussi son index
        int index = table.getRowIndex();
        // Suite du traitement sur l'objet sélectionné.
    }
    L'objet récupéré par evt.getSource() n'est pas une dataTable, puisqu'on a vraisemblablement cliqué sur un commandLink ou un commandButton.
    Pour récupérer la dataTable il faut passer un certain nombre de fois par getParent() sur le commandLink ou commandButton.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    HtmlCommandLink lnk = (HtmlCommandLink)ev.getSource();
    HtmlDataTable table = (HtmlDataTable)lnk.getParent().getParent().getParent();
    Dans mon cas le lien est dans un HtmlForm qui est dans un UIColumn, d'où la nécéssite d'appeler trois fois getParent().

    En tous cas, merci beaucoup romaintaz.

  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
    Je suis d'accord avec toi sur les deux points : Oui, c'est la meilleure des trois méthodes (ok, c'est celle que j'avais proposé ) et oui, il y a une incohérence. Je fais corriger ça !
    Merci à toi...
    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: 2
    Dernier message: 05/02/2015, 18h34
  2. Réponses: 3
    Dernier message: 15/09/2006, 14h01
  3. utilisation d'un managed bean par un autre
    Par Romain93 dans le forum JSF
    Réponses: 6
    Dernier message: 28/07/2006, 10h29
  4. Acces aux attributs d'un bean dans une jsp
    Par mariemor64 dans le forum Struts 1
    Réponses: 2
    Dernier message: 02/06/2006, 10h32
  5. Réponses: 4
    Dernier message: 10/03/2006, 17h25

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