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 :

rich dataTable récupération des données d'une ligne


Sujet :

JSF Java

  1. #1
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut rich dataTable récupération des données d'une ligne
    Bonjour à tous,

    une petite question pour une utilisation de richfaces dataTable.

    L'objectif est qu'au double clic sur une ligne du tableau, un modalPanel apparaisse pour consulter des infos complémentaires et/ou modifier cellesaffichées.

    j'ai trouvé sur les tutos ceci :
    1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <rich:dataTable border="0" var="list"
    	value="#{managedBean.dataTableRows}" id="table">
    	<a4j:support event="onRowClick" 	action="#{managedBean.processRowUpdate}"
    oncomplete="javascript:Richfaces.showModalPanel('_panel_Row_Details',{left:'auto', top:'auto'})">
    		<f:setPropertyActionListener value="#{list}"
    			target="#{managedBean.selectedRow}" />
    	</a4j:support>
     
    	<!-- déclaration des colonnes -->
    </rich:dataTable>

    ainsi que les 3 méthodes pour récupérer le code coté serveur

    mon code deviens donc
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <rich:modalPanel id="modif" minHeight="200" minWidth="450" height="200"
    	width="500">
    	<f:facet name="header">
    		<h:outputText value="Modifier les informations de l'acteur" />
    				</f:facet>
    				<f:facet name="controls">
            </f:facet>
    </rich:modalPanel>
     
    <rich:dataTable onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'" width="100%" var="acteurs" value="#{contexte.listeActeurs}" >
    	<a4j:support event="onRowDblClick" 
    		action="#{contexte.selectionLigne}"
    oncomplete="javascript:Richfaces.showModalPanel(modif)">
    					<f:setPropertyActionListener value="#{acteurs}" target="#{contexte.acteurSelectionne}" />
    				</a4j:support>
     
    				<f:facet name="header">
    					<rich:columnGroup>
    						<rich:column>
    							<h:outputText value="Nom" />
    						</rich:column>
    						<rich:column>
    							<h:outputText value="Prénom" />
    						</rich:column>
    					</rich:columnGroup>
    				</f:facet>
     
    				<rich:column>
    					<h:outputText value="#{acteurs.nom}" />
    				</rich:column>
    				<rich:column>
    					<h:outputText value="#{acteurs.prenom}" />
    				</rich:column>
    			</rich:dataTable>
    mais rien ne se passe et en débug je n'arrive jamais à mes points d'arrêt dans selectionLigne

  2. #2
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    il te manque les quotes dans le show modalpanel
    La connaissance est la seule chose qui s'accroit lorsqu'on la partage.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Points : 117
    Points
    117
    Par défaut
    Ajouter reRender="idModelpanel" dans le dataTable, et donner l'id de ton modelPanel.

  4. #4
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut
    En fait, pour l'instant ce n'est pas tellement l'affichage du modal panel qui posait problème, c'est que ni la méthode acteurSelectionne ni setActeurSelectionne ne sont appelées...

    hors tant que ceci n'est pas fait, l'affichage du modal panel (oncomplete) ne peut pas se faire.

    Pensant qu'il fallait récupérer les données envoyées par l'action, j'ai tenté de faire un binding vers un objet dans mon contexte, dans le doute une HtmlDataTable pour utiliser la méthode getRowData, mais évidemment, pas de conversion automatique de la dataTable richfaces vers HtmlDataTable.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Points : 117
    Points
    117
    Par défaut
    Utilisé cette méthode:

    -dans le <rich:dateTable>, passer ton action comme une action Listener,
    actionListener="tonBean.processRowUpdate",
    la méthode processRowUpdate doit avoir un argument de type actionEvent;
    processRowUpdate(ActionEvent e){.....}

    -Utilisé l'attribut onRowClick de DataTable pour ouvrir ton model panel.
    onRowClick=" Richfaces.showModalPanel('modif');"

    -Utilisé reRender="modif" du DataTable.

    Avec un submitMode="ajax".(je pense).

    bonne chance.

  6. #6
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    peut tu mettre l'output html du tableau.(ou fais le check toi meme du onrowdblclick)
    La connaissance est la seule chose qui s'accroit lorsqu'on la partage.

  7. #7
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut
    Citation Envoyé par sal.gass Voir le message
    Utilisé cette méthode:

    -dans le <rich:dateTable>, passer ton action comme une action Listener,
    actionListener="tonBean.processRowUpdate",
    la méthode processRowUpdate doit avoir un argument de type actionEvent;
    processRowUpdate(ActionEvent e){.....}
    a4j:support event="onRowDblClick" est sensé instancier lui même un actionListener non ?

    bon j'ajoute le code de mon bean :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    import java.util.ArrayList;
    import java.util.List;
     
    public class ContexteUtilisateur {
     
    	private Acteur acteurSelectionne;
     
    	/** Liste des acteurs gérés par l'application. */
    	private List<Acteur> listeActeurs = null;
    	/** acteur courant sélectionné. */
    	private Acteur acteurCourant;
     
    	/** Liste des réalisateurs gérés par l'application. */
    	private List<Realisateur> listeRealisateurs = null;
    	/** Réalisateur courant sélectionné. */
    	private Realisateur realisateurCourant;
     
    	/** Liste des films gérés par l'application. */
    	private List<Video> listeVideos = null;
    	/** film courant sélectionné. */
    	private Video videoCourant;
     
    	public ContexteUtilisateur()
    	{
    		listeActeurs = new ArrayList<Acteur> ();
    		listeRealisateurs = new ArrayList<Realisateur> ();
    		listeVideos = new ArrayList<Video> ();
     
    		listeActeurs.add(new Acteur("B","M"));
    		listeActeurs.add(new Acteur("C","T"));
    		listeActeurs.add(new Acteur("C","O"));
    		listeRealisateurs.add(new Realisateur("Sb","S"));
    		listeVideos.add(new Video("Le Mépris"));
     
    	}
     
    	public List<Acteur> getListeActeurs()
    	{
    		return listeActeurs;
    	}
     
    	public void selectionLigne()
    	{
    		System.out.println(acteurSelectionne);
    	}
     
    	public void setActeurSelectionne(Acteur act)
    	{
    		acteurSelectionne=new Acteur(act.getNom(),act.getPrenom());
    	}
     
    	public Acteur getActeurSelectionne()
    	{
    		return acteurSelectionne;
    	}
    }

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Points : 117
    Points
    117
    Par défaut
    Oui comme tu a, juste il faut faire exécuter la méthode de récupération des valeurs du ligne sélectionné avant l'affichage du modelPanel,
    J'ai fait erreur l'ouverture du Panel doit se fait avec un oncomplete : oncomplete="Richfaces.showModalPanel('modifier');"

  9. #9
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut
    donc mon problème reste entier, le passage à la méthode du bean est un mystère et la doc est bien peu claire là dessus

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 197
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par argonath Voir le message
    donc mon problème reste entier, le passage à la méthode du bean est un mystère et la doc est bien peu claire là dessus
    Je sais pas exactement ou est le pb, j'ai passé par le même truc avant, et j'ai arrivé à sortir avec l'utilisation de actionListener="...".
    Éviter l'utilisation de <f:setPropertyActionListener> peut être ce tag qui fait
    un pb.
    utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    monObjet = (MonObjet ) FacesContext.getCurrentInstance()
    				.getExternalContext().getRequestMap().get("item");
    Pour récupérer la valeur sélectionné.

    Bonne chance.

  11. #11
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    Citation Envoyé par argonath Voir le message
    donc mon problème reste entier, le passage à la méthode du bean est un mystère et la doc est bien peu claire là dessus
    il faut jeter un coup d'œil sur la , tu trouvera trois méthodes pour récupérer la ligne courante d'une dataTable.

  12. #12
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    il faut jeter un coup d'œil sur la , tu trouvera trois méthodes pour récupérer la ligne courante d'une dataTable.

    déjà fait, c'est l'une d'entre elles que j'essaye d'utiliser.

    bon alors le actionListener ne pouvant se placer comme attribut de dataTable, je le met dans a4j:support :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <a4j:support event="onRowDblClick"
       actionListener="#{contexte.processRowUpdate}"
       action="#{contexte.selectionLigne}"
       oncomplete="javascript:Richfaces.showModalPanel('modif')">
    </a4j:support>
    et dans mon bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	public void processRowUpdate(ActionEvent e)
    	{
    		acteurCourant = ( Acteur ) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("item");
    	}
     
        	public void selectionLigne()
    	{
    		System.out.println(acteurCourant);
    	}

    toujours rien on entre jamais dans ces deux méthodes

  13. #13
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    est ce que la dataTable est incluse dans un form?

  14. #14
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    est ce que la dataTable est incluse dans un form?
    nope

  15. #15
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    Il faut bien.sinon a4j:support ne marchera pas..comme pour tous les composants commandXXXX.

  16. #16
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut
    en effet en ajoutant les <form></form> le double clic amène bien jusqu'au modalPanel, cependant entre les deux il ne s'est rien passé dans mon bean ^^'

  17. #17
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    ton bean doit etre en scope session.
    le modalPanel doit avoir son propre form.

  18. #18
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    ton bean doit etre en scope session.
    Il est en application pour l'instant certes... en quoi est-ce problématique ?

  19. #19
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    Citation Envoyé par argonath Voir le message
    Il est en application pour l'instant certes... en quoi est-ce problématique ?
    en application ça marche aussi,
    ajoute un reRender du contenu de la modalPanel lorsque tu l'ouvre.
    Il y'a des exemples sur le site de Richfaces et ici même en français dans les tutoriels JSF.

  20. #20
    Membre averti Avatar de argonath
    Homme Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'Etudes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2009
    Messages : 248
    Points : 381
    Points
    381
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    Il y'a des exemples sur le site de Richfaces et ici même en français dans les tutoriels JSF.
    Helas si ca pouvait être aussi simple ^^

    j'ai tout ca sous les yeux depuis le début, avec la même lacune, le code coté bean dont aucun modèle n'est fourni.
    En effet je ne comprends pas bien le rôle attendu de l'actionListener (qu'il soit fait "à la main" comme conseillé par sal.gass ou inclus dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <f:setPropertyActionListener value="#{list}" target="#{managedBean.selectedRow}" />
    puisque après il y a la méthode lancée par l'action de a4j:support.

    En outre quelle est la signature attendue de ces méthodes, est ce que l'objet est envoyé (ici donc mon acteur dont les différents attributs sont dans les colonnes ) ou est ce que les deux méthodes n'ont besoin d'aucun argument (enfin si j'utilise setPropertyActionListener ) et qu'il faut récupérer l'objet dans tout les cas avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("item");
    Enfin pour l'instant, si j'en crois mon debugger eclipse jamais je n'entre dans le corps de mes méthodes que ce soit l'actionListener ou celle de "action" d'où mon interrogation sur la signature.

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/11/2010, 12h00
  2. Réponses: 2
    Dernier message: 20/03/2009, 12h25
  3. [MySQL] problème de récupération des données d'une requête
    Par maniaco_jazz dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/02/2007, 12h12
  4. [MySQL] Problème de récupération des données dans une fonction
    Par highman dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/10/2006, 20h04
  5. récupération des données via une liste déroulante
    Par rahan_dave dans le forum Access
    Réponses: 1
    Dernier message: 13/10/2005, 12h27

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