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 :

[débutant] : navigation à partir d'une datatable


Sujet :

JSF Java

  1. #1
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut [débutant] : navigation à partir d'une datatable
    Mon objectif est assez simple : j'ai une page contenant, entre autres, une datatable remplies de "personnes".

    Cette datatable doit me permettre d'aboutir à la fiche complete d'une de ces personnes lorsque je clique dessus (sur la ligne, ou bien sur un lien de la ligne, je ne sais pas trop comment faire)

    En résumé, ma datatable affiche donc le contenu d'une ArrayList. Chaque élément de cette ArrayList est un objet PersonnePhysique

    je voudrait pouvoir accéder à la fiche de cette PersonnePhysique en cliquant sur un element de la dataTable...

    Note : j'ai la possibilité d'utiliser une t:dataTable ou bien une h:dataTable

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    et tu aimerais savoir quoi en gros ? tu créer dans ta dataTable une colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <h:column>
     <h:commandLink id="lnkDetail" action="#{tonManagedBean.detail}">
       <h:graphicImage id="imgDetail" url="/images/view.gif" alt="#{text.common_detail}" style="border-style:none" />
       <f:param name="personId" value="#{row.personId}" />
    </h:commandLink>
    </h:column>
    et ensuite tu implementes ta method detail

    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
     
    	public String detail() {
    		ec.log("Begin - detail()");
    		if (personService== null) {
    			ec.handleError(ERR_SERVICE_IS_NULL);
    		} else {
    			try {
    				Long personId= UtilGui.retrieveLongFromContext("personId");
    				selectedData = personService.getPerson(personId);
    				return GO_DETAIL;
    			} catch (RuntimeException ex) {
    				ec.handleError(ERR_DETAIL, ex);
    				UtilGui.setJSFErrorMessage("error_detail", ex);
    				return GO_LIST;
    			}
    		}
    		// If any other error...
    		return GO_ERROR;
    	}

  3. #3
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Merci pour ta réponse, mais il me manque certains éléments :

    Dans ton bean, d'où sortent : personService et UtilGui ?

    Comment je peux récupérer l'id de la personne pour laquelle j'ai utilisé le lien

    Mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <t:column>
      <h:commandLink id="lnkDetail" action="#{accueilContenu.charger}">
        <h:graphicImage id="imgDetail" url="/images/detail.jpg" alt="détail"/>
        <f:param name="personId" value="#{listeMorale.id}" />
      </h:commandLink>
    </t:column>

  4. #4
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Peut etre puis je passer l'identifiant de la personne à voir en parametre de la fonction action
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandLink id="lnkDetail" action="#{accueilContenu.charger}" >
    Sais-tu comment procéder pour que je puisse l'appeler avec un parametre

    J'aurais alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        public String charger(int personId) {
            //Affectation des infos sur la personne au bean PersonnePhysique
    	return "PersonnePhysique";
        }

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    Citation Envoyé par abertaud
    Peut etre puis je passer l'identifiant de la personne à voir en parametre de la fonction action
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandLink id="lnkDetail" action="#{accueilContenu.charger}" >
    Sais-tu comment procéder pour que je puisse l'appeler avec un parametre

    J'aurais alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        public String charger(int personId) {
            //Affectation des infos sur la personne au bean PersonnePhysique
    	return "PersonnePhysique";
        }
    tu ne peux pas passer de paramètre de cette facon, tu dois passer un f:param

  6. #6
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    comment je me sers du p:param ?

    Je vois comment le déclarer dans ma page jsp. Mais je ne sais pas comment procéder ensuite pour la déclaration de la méthode dans le bean...

    Je vois que tu utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Long personId= UtilGui.retrieveLongFromContext("personId");
    D'ou sors UtilGui ?

  7. #7
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 120
    Points : 106
    Points
    106
    Par défaut
    Pour récupérer la ligne, il faut que tu lies ta table à un élément de type UIData via l'attribut binding de la dataTable. Ensuite, dans ton action le code suivant te permettra de récupérer la ligne qui a été cliquée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int row = dataTable.getIndexRow();
    Si je comprends bien le code qu'on t'a fourni avant, la classe UtilGUI permet de récupérer la ligne et donc ton index d'une autre façon. Avec ma technique, plus besoin du paramètre. Voilà comment est codé ma colonne de la dataTable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <h:column>
      <h:commandLink id="lnkDetail" action="#{accueilContenu.charger}">
        <h:graphicImage id="imgDetail" url="/images/detail.jpg" alt="détail"/>
      </h:commandLink>
    </h:column>
    A toi de choisir !!!

  8. #8
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Je suis pas certain d'avoir réalisé ton idée le plus proprement possible, mais au moins ca marche, je récupère l'identifiant (de 0 à nombre de ligne) de la ligne sur laquelle j'ai cliqué.

    Je peux alors faire l'affectation de mon bean comme voulu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public String chargerPersonnePhysique() {
            //récupération de la ligne cliquée
            int val = tablePhysique.getRowIndex();
     
            //affectation du bean
            FacesContext context = FacesContext.getCurrentInstance();
            HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
            PersonnePhysique pers = (PersonnePhysique)listePhysique.get(val);
            session.setAttribute("personnePhysique",pers);
     
            //Renvoi vers la page correspondant à une personne physique
            return "personnePhysique";
        }
    Dans ma page JSF, le code est effectivement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <t:column>
      <h:commandLink id="lnkDetail" action="#{accueilContenu.chargerPersonnePhysique}" >
        <h:graphicImage id="imgDetail" url="/images/detail.jpg" alt="détail"/>
      </h:commandLink>
    </t:column>
    Sinon, juste en passant si jamais quelqu'un se ressert de ce post, la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int row = dataTable.getIndexRow();
    n'existe pas. C'est en fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int row = dataTable.getRowIndex();

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    c'est une solution possible mon fameux retrieveLong fait appel a cette méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static Object retrieveObjectFromContext(String key) {
    	FacesContext context = FacesContext.getCurrentInstance();
    	Map map = context.getExternalContext().getRequestParameterMap();
    	return map.get(key);
    }
    c est pratique lorsque tu veux récupérer a l aide de f:param un champ et sa valeur

    comme dans l exemple

    f:param name="personId" value="#{row.personId}"

  10. #10
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Un post, et deux réponses, toutes les deux très pertinentes.

    Je me suis servi de la requete sans paramètre, mais je sais que j'aurai besoin bientot d'utiliser un paramètre pour un autre souci. Donc merci à tous les deux de vous être penchés dessus...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 511
    Points : 514
    Points
    514
    Par défaut
    juste pour info :

    au lieu de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public String chargerPersonnePhysique() {
            //récupération de la ligne cliquée
            int val = tablePhysique.getRowIndex();
            PersonnePhysique pers = (PersonnePhysique)listePhysique.get(val);
     
     
        }
    tu peux aussi faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PersonnePhysique pers = (PersonnePhysique)tablePhysique.getRowData;
    ça revient bien sur au meme...

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

Discussions similaires

  1. Créer un historique de navigation à partir d'une listview
    Par Rohan21 dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 08/09/2014, 16h17
  2. [Débutant] Mettre à jour UN BD à partir d'une Datatable
    Par abd75web dans le forum VB.NET
    Réponses: 5
    Dernier message: 07/02/2013, 14h29
  3. [C#2.0] Mettre à jour la base de données à partir d'une DataTable
    Par Rodie dans le forum Accès aux données
    Réponses: 6
    Dernier message: 16/05/2007, 15h24
  4. [VB6][Débutant] Execute une commande à partir d'une chaine
    Par Bluespike62 dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 09/05/2006, 17h43
  5. [C#] mettre à jour ma bdd à partir d'une datatable
    Par rudhf dans le forum Windows Forms
    Réponses: 17
    Dernier message: 27/04/2006, 15h27

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