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 :

JSF1.2/RichFaces3.3.0GA: requête ne s'exécutant qu'une seule fois par session


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Par défaut JSF1.2/RichFaces3.3.0GA: requête ne s'exécutant qu'une seule fois par session
    Bonjour à tous et merci d'avance,

    Je travaille actuellement sur un mini-projet afin de me familiariser avec la technologie JSF1.2. Le projet consiste à créer un CRUD pour un annuaire simple (3 tables Personne/Equipe/Société).

    Tout d'abord j'utilise donc JSF1.2, facelets, richfaces3.3.0GA, ainsi que Spring et Hibernate.

    Maintenant le code:

    Je travaille sur une dataTable affichant une liste de personne en fournissant quelques infos directement dans la table. Le code qui suis correspond à un composant qui affiche donc la liste des personnes, et qui ouvre un menu contextuel quand on clique pour afficher une fiche détaillé/modifier/supprimer.

    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
    57
    58
    59
    60
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:a4j="http://richfaces.org/a4j"
    	xmlns:rich="http://richfaces.org/rich">
    	<h:form>
    		<!-- dataTable pour affichage de la liste des personnes -->
    		<rich:dataTable id="listePersonne" rows="15" value="#{liste}"
    			var="personne" width="300px" columnClasses="center"
    			reRender="sc1,sc2">
    			<!-- Entête du tableau -->
    			<f:facet name="header">
    				<h:panelGroup>
    					<h:outputText value="Liste des personnes" />
    					<rich:datascroller reRender="sc2" id="sc1" pageIndexVar="pageIndex"
    						pagesVar="pages" />
    				</h:panelGroup>
    			</f:facet>
    <!-- première colonne: Nom des Personnes -->
    			<rich:column sortBy="#{personne.nom}">
    				<f:facet name="header">
    					<h:outputText value="Nom" />
    				</f:facet>
    				<h:outputText value="#{personne.nom}" />
    			</rich:column>
     
    <!-- Suivi d autres données style prénom/nom d équipe/nom de l entreprise -->
     
    <!-- Pied du tableau incluant un scroller-->
    			<f:facet name="footer">
    				<rich:datascroller reRender="sc1" pageIndexVar="pageIndex"
    					pagesVar="pages" id="sc2" />
    			</f:facet>
    <!-- Controleur pour menu Contextuel -->
    			<rich:componentControl event="onRowClick" for="menu" operation="show">
    				<f:param value="#{personne.nom}" name="nom" />
    				<f:param value="#{personne.idPersonne}" name="id" />
    			</rich:componentControl>
    		</rich:dataTable>
     
    <!-- le menu contextuel -->
    		<rich:contextMenu attached="false" id="menu" >
    			<f:facet name="header">
    				<h:outputText value="{nom}" />
    			</f:facet>
    			<rich:menuItem action="fiche" ajaxSingle="true">
    				<a4j:actionparam name="personne_id" assignTo="#{AffichageBean.tbPersonneId}"
    		value="{id}" />
    				<h:outputText value="fiche" />
    			</rich:menuItem>
    			<rich:menuItem action="modifier">
    					<h:outputText value="modifier" />
    			</rich:menuItem>
    			<rich:menuItem action="supprimer">
    			<h:outputText value="supprimer" />
    			</rich:menuItem>
    		</rich:contextMenu>
    	</h:form>
    </ui:composition>
    Pour information: toute la partie DataTable fonctionne très bien, la liste s'affiche, les tris fonctionne bien, les scrollers aussi. Seule la première option du menu contextuel est active pour le moment, les autres sont là en prévision.
    Dans le menu contextuel, la "fiche" renvoi vers une autre page donnant plus de détails sur la personne. (fiche détaillée)

    Voilà mon problème est le suivant:
    Lorsque je vais cliquer la première fois sur la table et demander à voir une fiche, je suis bien envoyer vers la page, et la fiche apparait normalement.
    Mais si je demande à voir une autre fiche, j'ai toujours les informations de ma première fiche qui apparait.

    J'ai donc chercher la cause et je me suis aperçu que cette partie de code (situé dans le menu contextuel)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <a4j:actionparam name="personne_id" 
    assignTo="#{AffichageBean.tbPersonneId}" value="{id}" />
    ne s'exécute que la première fois. (j'ai fait un simple print pour voir la valeur actuelle, et il ne s'affiche qu'une seule fois). En gros le setTBPersonneId n'est exécuter qu'une seule et unique fois. J'ai beau naviguer sur différentes pages, revenir sur la liste et sélectionner une autre personne, je reviens toujours sur la première ouverte.

    Pour info: le bean affichageBean est en scope "Session", il me sers à garder des variables autre entre différentes pages.

    Voilà, est ce que quelqu'un a une idée pour savoir d'où vient le problème?
    Si vous voulez d'autres parties de code, ne pas hésiter.

    Merci d'avance.

  2. #2
    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
    Par défaut
    Lorsque tu clique sur une autre ligne, le menu s'affiche avec la bonne ligne (le bon nom)?

    ajoute un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <rich:messages ajaxRendered="true"/>
    voir si tu n'a pas d'erreurs de validations ou de conversions.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Par défaut
    Je viens de rajouter un {nom} dans l'un de mes <rich:menuItem> et c'est bien le bon nom qui apparait.

    Et aucun message d'erreur, que ce soit au niveau de la page de ma dataTable, aussi bien que sur la page d'arrivée (fiche descriptive).

  4. #4
    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
    Par défaut
    tu fais comment pour retrouver tous les détails de ton objet?
    Il n'y a pas d'action dans le menu.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Par défaut
    Pour récupérer l'objet, je passe par un autre bean "TbPersonneBean" qui va venir chercher la valeur de tbPersonneId dans "AffichageBean" (je sais, c'est un pneu compliqué). (sachant que TbPersonneBean a un scope "request").

    Je n'ai pas réussi à envoyer directement l'objet vers l'autre page (ce qui aurait été à la fois plus simple et plus propre) malgré différents essais. Ceci m'éviterai de devoir passer par l'AffichageBean.

    Edit: En fait, le TbPersonneBean est "lié" à ma table et me permet de remplir mes formulaires, etc. La page "fiche" va faire appel à mon bean TbPersonneBean, qui, au moment de s'initialiser, va chercher l'id dans AffichageBean. (je sais pas si c'est plus clair)

    Alors que AffichageBean me permet de gérer d'autres paramètres graphiques (page pour les scrollers) ou des paramètres devant être préserver plus longtemps qu'une requête.

  6. #6
    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
    Par défaut
    et quand tu clique sur le menu la deuxième fois, qu'est ce qui se passe l'action?

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

Discussions similaires

  1. Requête SQL: Afficher Gratuit/Payant en une seule fois
    Par Sethenssen dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/11/2009, 20h43
  2. Réponses: 1
    Dernier message: 25/09/2009, 12h03
  3. [MySQL] requête select une seule fois
    Par speedylol dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/02/2009, 06h40
  4. [Prototype] Envoie qu'une seule fois d'une requête
    Par akrogames dans le forum Bibliothèques & Frameworks
    Réponses: 8
    Dernier message: 20/05/2008, 11h48
  5. Fusionner 3 requêtes avec un SUM en une seule
    Par David Guillouet dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/07/2004, 15h54

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