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 :

Problème Richfaces -> contextMenu, dataTable, modelPanel


Sujet :

JSF Java

  1. #1
    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 Problème Richfaces -> contextMenu, dataTable, modelPanel
    Bonjour,

    J'ai un petit soucis. J'ai créer un tableau contenant des renseignements sur des utilisateurs, dans ce tableau il y a une colonne spécial pour modifier la personne qui permet d'ouvrir un modalPanel et d'afficher un formulaire, cette exemple montre très bien le fonctionnement de mon tableau:

    http://livedemo.exadel.com/richfaces...=editDataTable

    Jusque la aucun problème. Maintenant ce que je voudrais faire, c'est supprimer ce lien et que l'utilisateur accède au modalPanel grâce à un contextMenu.

    Rappel du contextMenu :

    http://livedemo.exadel.com/richfaces...Menu&tab=usage

    Le problème que j'ai maintenant c'est pour faire passer l'utilisateur associé à la ligne pour pré remplir le formulaire du modalPanel.

    Voici mon code :

    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
     
    <rich:contextMenu event="oncontextmenu" attachTo="usersTable" id="menu"
    			submitMode="ajax">
    			<rich:menuItem ajaxSingle="true" value="Editer"
    				onclick="Richfaces.showModalPanel('editUserPanel');">
    			</rich:menuItem>
    </rich:contextMenu>
     
    <rich:dataTable id="usersTable" onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
    			onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
    			cellpadding="0" cellspacing="0" width="400" border="0"
    			value="#{usersDataTableBean.users}" var="user">
     
    <!-- ici toutes les colonnes avec les informations concernant la personne -->
     
    	<rich:componentControl event="onRowClick" for="menu" operation="show" />
    </rich:dataTable>
     
    <rich:modalPanel id="editUserPanel" autosized="true" width="450">
    	<f:facet name="controls">
    		<h:graphicImage value="/pages/images/close.png" style="cursor:pointer" 
    			onclick="Richfaces.hideModalPanel('editUserPanel');"/>
    	</f:facet>
     
            <!-- J'inclus mon formulaire -->
     
    	<a4j:include viewId="/pages/userRegisterForm.xhtml" />
    	<a4j:commandButton action="#{usersFormBean.updateUser}" value="Modifier" />
    </rich:modalPanel>
    Comment puis-je faire passer mon utilisateur au formulaire?

    J'ai essayer en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <rich:componentControl event="onRowClick" for="menu" operation="show">
                    <f:param value="#{user}" name="user"/>
    </rich:componentControl>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <rich:contextMenu event="oncontextmenu" attached="false" id="menu"
    			submitMode="ajax">
    	<rich:menuItem ajaxSingle="true" value="Editer"
    				onclick="Richfaces.showModalPanel('editUserPanel');">
    		<f:setPropertyActionListener value="#{user}"
    					target="#{usersFormBean.user}" />
    	</rich:menuItem>
    </rich:contextMenu>
    Mais ça transforme mon objet JAVA en objet JAVAScript et cela cause des erreurs. Je ne pense pas que ce soit la bonne solutions.

  2. #2
    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
    J'ai trouvé mon bonheur ici:

    ftp://ftp-developpez.com/lmellouk/tu.../richfaces.pdf

    Du coup de récupère le login (qui est une clé primaire) grâce à <f:param>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <rich:componentControl event="onRowClick" for="menu" operation="show">
    	<f:param value="#{user.login}" name="userLogin" />
    </rich:componentControl>
    Puis j'initialise mon bean associé au formulaire avec le login récupérer et enfin j'appelle la méthode selectUser, qui a partir du login initialise l'objet User situé dans ce même bean.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <rich:contextMenu event="oncontextmenu" attached="false" id="menu"
    	submitMode="ajax" >
    	<rich:menuItem ajaxSingle="true" value="Editer {userLogin}"
    		action="#{usersFormBean.selectUser}"				oncomplete="Richfaces.showModalPanel('editUserPanel');">
    		<a4j:actionparam value="{userLogin}"
    			assignTo="#{usersFormBean.login}" />
    	</rich:menuItem>
    </rich:contextMenu>

  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
    Salut,
    Très bien comme sujet de discussion, j'ai le même cas que vous,

    Ce que j'ai compris c'est que tu a inclure le formulaire de l'edit dans une nouvelle page, donc tu a fait la création d'un nouveau bean pour l'edit.

    Mois j'ai voulue afficher le formulaire dans la meme page que la tableau c'est à dire dans le rich:modelPanel je saisie les formulairesde l'edit.

    Et un seul bean, dans le bean initiale je récupère la ligne sélectionné, j'ai utilisé <f:setPropertyActionListener > comme dan ce lien :
    http://livedemo.exadel.com/richfaces...ble&cid=967230
    Mais ca ne marche pas: voilà le code :

    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:dropDownMenu id="actionButton" direction="top-left"
    value="#{i18n.btn_actions}" styleClass="btnAction" jointPoint="tl">
    
    <rich:menuItem value="Modifé valeaur"
      id="editMenuItem"
    icon="#{a4jSkin.nameSkin}/images/edit16.png"
    action="#{monBean.getSelectedObject}" >
    <f:setPropertyActionListener value="#{item}"
    	target="#{monBean.currentObject}" />
    
    <rich:componentControl for="editPanel"
    								attachTo="editObjectMenuItem" operation="show" event="onclick"  />
    </rich:menuItem>

    et dans model pane j'appel l'objet remplie dans le bean par setPropertyActionListener , mais ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <rich:modalPanel 
    .......
     
    <h:inputText value="#{monBean.currentObject.id}" />
    ne marche pas :

    Je vais séparer le formulaire de l'edit dans une page edit.xhtml et je vais créer un 2 autre bean, je vais assayer.
    (Mais c'est pas une solution optimale, je suis obliger car j'ai essayer tous)

    J'ai essayé de récupérer la ligne selectionné dans le meme bean mais l'exécution l'affichage de rich:modelpanel s'exécute avant l'action dans le menuItem, Est ce q'il ya une sol pour ça ? c à d récupérer la ligne courante avant l'affichage de modelpanel ?

    je vais essayé ta méthode, puis je te dit si c'est ok .

  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
    A la place de setPropertyActionListener, essay:

    <a4j:actionparam value="{item}" assignTo="#{monBean.currentObject}" />

  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
    <a4j:actionparam value="{item}" assignTo="#{monBean.currentObject}" />
    Merci pour ta réponse,
    j'ai essayé mais pas de chance

  6. #6
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 154
    Points : 149
    Points
    149
    Par défaut
    En fait la solution a votre problème est d'utiliser ajax, tout simplement.

    La modalPanel ne doit pas être dans votre page d'origine mais n'apparaitre que lors de la validation du formulaire, ce qui aura pour conscéquence de faire entrer votre utilisateur dans le bean.

    Alors les outils à utiliser sont :
    <a4j:keepAlive beanName="nom_de_ton_bean" />
    Permet de persister un bean entre les différentes requêtes. Cela permettra de ne pas faire réinitialiser votre bean entre les requêtes et donc d'en garder le contenu.

    La modalPanel doit avec un renderer qui pointe sur un variable de votre bean qui passera à true lorsque vous appliquez l'action correspondante au clic du bouton.

    Avec ça, vous devriez pouvoir vous en sortir.

  7. #7
    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
    salut pour tous, je m'excuse pour le retard.

    Je vous remercie Fafhrd et FunkyBreizh pour vos aides.

    J'ai sortir le model Panel de editPanel de mon bean de la page principale.
    et je fait include pour le récupérer.

    pour bien présenter le sujet voila ce que je traite.

    j'ai une liste, le dernier colonne pour les actions , edit, show ...
    les actions se présente dans un menu.

    comme composant j'utilise le suivant :

    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
    <rich:dropDownMenu id="actionButton" direction="top-left"
    value="#{i18n.btn_actions}" styleClass="btnAction" jointPoint="tl">
    
    <rich:menuItem value="Modifé valeaur"
      id="editMenuItem"
    icon="#{a4jSkin.nameSkin}/images/edit16.png"
    action="#{monBean.getSelectedObject}" >
    <f:setPropertyActionListener value="#{item}"
    	target="#{monBean.currentObject}" />
    
    <rich:componentControl for="editPanel"
    attachTo="editObjectMenuItem" operation="show" event="onclick"  />
    </rich:menuItem>
    
    puis dans le model panel j'utilise 
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12
     
    <h:inputText value="#{monBean.currentObject.id}" />
    avec ce code
    la solution qui marche jusqu'à maintenant c'est avec un action dans le bean je récupère l'id avec <f:param> du colonne sélectionnée puis je récupére l'objet dan l'action et pour afficher le model panel j'utilise l'attribut
    showWhenRendered="#{monBean.flag}" du model panel, qui est égale à true à l'exécution de l'action.

    mais cette solution n'est pas professionnel, car l'action su MenuItem doit etre exécuter pour afficher le Modelpanel donc il ya relaod (Actualisation ) de la page web.
    c'est pas le cas, car le model panel doit etre affichier après le clic.

    1) J'ai utilisé avec oncomplete="javascript:Richfaces.showModalPanel('editPanel');"
    et <f:setpropertyaction > le probleme c'est que les valeurs à editer ne s'affiche pas dans le model panel, car il faut qu'une action qui va etre executer pour passer les valeur avec <f:setpropertyaction >

    2) Avec componentControle ne marche pas aussi, le probleme d'affichage du modelpanel il faut mettre l'attribut submitMode="none" pour afficher le model panel, donc aucune balise de passage de parametre ne marche, aussi aucun action.



    J'ai pas bien compris votre solution Fafhrd , utilisation de <a4j:keepAlive beanName="nom_de_ton_bean" />

    vous pouvez expliquer de plus svp ???

    Merci d'avance.

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

Discussions similaires

  1. problème richfaces listshuttle
    Par damidame dans le forum JSF
    Réponses: 3
    Dernier message: 26/09/2008, 14h54
  2. Problème Richfaces Netbeans 6.1
    Par JoeBurtonn dans le forum JSF
    Réponses: 3
    Dernier message: 09/06/2008, 15h35
  3. Problème richfaces eclipse
    Par dolfendo dans le forum JSF
    Réponses: 5
    Dernier message: 01/06/2008, 12h55
  4. Problème pour Comparer 2 Datatables et mise à jour
    Par Jean-Marc68 dans le forum C#
    Réponses: 4
    Dernier message: 21/11/2007, 19h28
  5. Problème pour lire une datatable
    Par kikitx dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/08/2007, 20h19

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