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 :

Attribuer un command link à une ligne d'un datatable


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 132
    Par défaut Attribuer un command link à une ligne d'un datatable
    Je développe une ' Entreprise application ' avec netbeans 6.7 , JSF et MySQL .


    J'ai construit un datatable pour afficher le contenu de la table 'Client' de ma base de données .
    J'ai voulu ajouter un command link 'Edit' à chaque ligne pour me permettre de modifier cette ligne dans la base de données . J'ai trouvé cette methode dans cette page :http://wiki.apache.org/myfaces/Execu...ttonParameters

    (en bas de page ) mais j'ai pas compris ce que indique exactement :


    dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <t:dataTable var="emp" .... > 
     
     <h:commandLink id="editLink" action="#{employeeAction.prepareEdit}">
      <h:outputText value="#{msg.edit}"/>
      <f:param name="id" value="#{emp.id}"/>
    </h:commandLink>
    Quelqu'un a une idée ,une autre methode ou un tutorial ?

    Merci d'avance

  2. #2
    Expert éminent
    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
    Par défaut
    ca veux dire que, quand on cliquera sur le lien, ca soumettra un attribut supplémentaire à la requete, qui est "id" et qui aura pour valeur #{emp.id}. Comme emp est une variable qui change à chaque ligne, ca te permet de savoir quelle ligne a été utilisée.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 132
    Par défaut
    J'ai essayé ca de la maniére suivante :

    dans lapage 'list.jsp' j'ai ajouté :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <h:commandLink id="edit"
                               value="Edit"
                               action="#{metier.edit}">
                               <f:param name="id" value="#{item.userId}"/>
    </h:commandLink>
    la methode 'edit' est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public String edit()
    {FacesContext context = FacesContext.getCurrentInstance(); 
    Map map = context.getExternalContext().getRequestParameterMap();
     userId = (Integer) map.get("userId");
        return "gotoprofile";
    }

    (J'ai changé String par Integer car le userId que j'ai choisi comme clé primaire est de type Integer .)

    mais enfin la page ne change pas (on ne se dirige pas vars la page 'profile' demandée malgré que j'ai fait ca au niveau de faces-config )

  4. #4
    Expert éminent
    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
    Par défaut
    d'abord c'est id, pas userId dans ton requestParameterMap. Ensuite, si l'action est dans une datatable et que l'action n'est pas exécutée, 99% du temps, c'est parce que la value de la datatable était request scope et n'existe plus après la soumission. Ce qui fait que le commandLink de la Nième ligne n'existe plus et que donc JSF n'a aucune action a exécuter.

  5. #5
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 132
    Par défaut
    Salut ,

    mon managedbean 'metier' et mon entity 'client' sont les deux en 'session'.

    En outre , j'ai chngé le command link de cette maniére :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <h:commandLink id="edit"
                               value="Edit"
                               action="#{metier.edit}">
                               <f:param name="userId" value="#{item.userId}"/>
    </h:commandLink>
    et ca pas marché .

    Au début j'ai mis id dans de cette facon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {FacesContext context = FacesContext.getCurrentInstance();
    Map map = context.getExternalContext().getRequestParameterMap();
    userId = (Integer) map.get("id");
        return "gotoprofile";
    }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <f:param name="id" value="#{item.id}"/>

    mais au deploiement j'ai obtenu cet erreur :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.ServletException: La classe 'Ent.Client' ne poss�de pas la propri�t� 'id'

  6. #6
    Expert éminent
    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
    Par défaut
    vérifie qu'il n'y a pas d'erreur de validation. Utilise un <h:messages/> pour ça. Vérifie aussi que la navigation-rule est correcte dans ton faces-config.xml. Ajoute aussi quelques messages de logs dans ton action, pour confirmer que l'on passe bien dedans.

    Sinon pour l'id, le code correct c'est ça (j'ai mis en gras les éléments qui doivent correspondre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {FacesContext context = FacesContext.getCurrentInstance();
    Map map = context.getExternalContext().getRequestParameterMap();
    String userId = (String) map.get("id");
        return "gotoprofile";
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      <f:param name="id" value="#{item.userId}"/>

Discussions similaires

  1. Sélection d'une ligne d'un dataTable
    Par scorplayer dans le forum JSF
    Réponses: 9
    Dernier message: 19/02/2010, 16h30
  2. Réponses: 51
    Dernier message: 23/09/2009, 18h39
  3. Réponses: 10
    Dernier message: 11/05/2009, 15h33
  4. Récupérer une ligne active rich:dataTable
    Par kookee dans le forum JSF
    Réponses: 3
    Dernier message: 26/03/2009, 15h12
  5. Ajouter une ligne a un DataTable
    Par LaDeveloppeuse dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/05/2007, 15h20

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