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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    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 : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    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 confirmé
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    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 confirmé
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    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 : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    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 confirmé
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    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 confirmé
    Inscrit en
    Juin 2005
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 120
    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 confirmé
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    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 : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    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}"

+ 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, 15h17
  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, 13h29
  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, 14h24
  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, 16h43
  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, 14h27

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