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 :

RichFaces : Datatable et menu contextuel + clic droit


Sujet :

JSF Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Points : 9
    Points
    9
    Par défaut RichFaces : Datatable et menu contextuel + clic droit
    Hello,

    J'ai construit une table dans laquelle je veux activer un menu contextuel quand je clique sur une ligne de cette table avec un clic droit.

    Pour créer ce fameux menu, deux solutions :

    1ère solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <rich:dataTable id="myDataTable" ...>
    ...
    </rich:dataTable>
    
    <rich:contextMenu id="contextMenuId" event="oncontextmenu"
    		attachTo="myDataTable">
    ...
    </rich:contextMenu>
    Ici on attache le menu directement à la table en précisant le type d'événement : CLIC DROIT (i.e oncontextmenu).

    Problème : Comment récupérer la ligne sur laquelle on a cliqué ?!

    J'ai essayé bon nombre de méthodes (ex : en récupérant la table dans le managed ben et en appelant la méthode getRowData() mais systématiquement ça me renvoie la même ligne peu importe sur laquelle je clique...)

    2ème solution:

    J'utilise "componentControl" pour activer le menu et passer un paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <rich:dataTable ... var="tableItem">
    	<rich:columns ...></rich:columns>
    
    	<rich:componentControl event="onRowClick" for="contextMenuId"
    		operation="show">
    		<f:param value="#{tableItem}" name="value" />
    	</rich:componentControl>
    
    </rich:dataTable>
    
    <rich:contextMenu id="contextMenuId" attached="false"
    	submitMode="ajax">
    	...
    </rich:contextMenu>
    Ici le menu est affiché correctement et je récupère la ligne sur laquelle j'ai cliqué !

    Problème : l'event "oncontextmenu" (clic droit) n'est pas supporté( sic !). Dans mon exemple ci dessus j'ai utilisé un simple clic et ça fonctionne...

    Quelq'un a-t-il une solution à me proposer SVP ?

    Merci

  2. #2
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Tu as essayé les exemples demo de RichFaces ici ?
    Personnellement je ne les ai pas encore testé

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Hello,

    Oui j'ai testé tous les exemples. Mon code répond à des besoins un peu plus spécifiques (comme pour la plupart des gens qui postent ici ^^).

    Aucune des solutions postées en haut ne remplissent à 100% leur contrat. Donc j'ai trouvé un compromis que voilà :

    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
    <rich:dataTable ... var="tableItem">
    	<rich:columns  ...>
    		<f:facet name="header">
    			<h:outputText value="..." />
    		</f:facet>
    		<h:outputText value="..." />
    		<rich:contextMenu event="oncontextmenu" attached="true"
    			submitMode="ajax">
    			<rich:menuItem value="...">
    				<a4j:actionparam name="..."
    					assignTo="#{dataTableBean.selectedRowPK}"
    					value="#{tableItem[0]}" />
    			</rich:menuItem>
    		</rich:contextMenu>
    	</rich:columns>
    </rich:dataTable>
    Je passe en paramètre de mon action (quand je fais un clic droit dans le menu) ce que j'appelle PK (ma clé primaire) de l'objet correspondant à la ligne sur laquelle je viens de cliquer. La contrainte c'est que la PK de mon objet doit tjs etre le 1er element de la ligne (d'ou l'index O).

    Je déteste franchement la façon dont est gérée l'itération des données dynamiques dans RichFaces (on doit itérer dans le JSP) mais bon je radote... je l'ai déjà exprimé dans mes précédents posts...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 110
    Points : 67
    Points
    67
    Par défaut
    Bonjour, j'ai le même soucis cf mon post :

    http://www.developpez.net/forums/d75...le-modelpanel/

    As-tu trouvé une solution propre à ce problème?

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

Discussions similaires

  1. Créer un menu contextuel (clic droit) en QML
    Par Jiyuu dans le forum Téléchargez
    Réponses: 2
    Dernier message: 10/04/2015, 23h55
  2. [PR-2010] Inserer des commandes dans menu contextuel clic droit
    Par SwissEngineer dans le forum Project
    Réponses: 0
    Dernier message: 08/01/2013, 12h37
  3. menu contextuel clic droit personnalisé
    Par nianko dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/03/2008, 20h01
  4. (Menu contextuel) Clique droit sur images
    Par Furius dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 02/10/2005, 21h21
  5. Réponses: 2
    Dernier message: 09/05/2003, 18h41

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