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 :

[PrimeFaces] evenement dans commandButton


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut [PrimeFaces] evenement dans commandButton
    Bonjour,

    j'ai un problème, probablement de conception, lors de l'appel d'un commandButton.

    Ce bouton permet, par l'intermédiaire d'un inputText à l'utilisateur de lancer une recherche. En gros ce que je souhaite faire. Quand l'utilisateur a saisi son texte et cliqué sur le bouton, la recherche va se lancer. Cette recherche est une requette SQL sur ma base de donnée. Suivant si elle trouve ou non un resultat, je stock dans une variable un message. Une fois finie elle va me mettre à jour un panelGroup dans ma page qui lui pourra afficher le résultat.
    Dans un second temps, je voudrais afficher le message.

    Le code de mon bouton est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <p:messages id="message" showDetail="true" autoUpdate="true" closable="true" />                            
    <h:panelGrid id="num1" columns="3" cellspacing="10" style="float:right;">
    	<h:outputLabel for="name" value="SID / Pays :" style="font-weight:bold"/> 					          
    	<p:inputText id="name" value="#{rechercheBean.nom}" />  					          
    	<p:commandButton id="btn" value="Rechercher" update="display" actionListener="#{rechercheBean.addInfo}"/>  					  
    </h:panelGrid>
    Le code qui est mis à jour sur ma page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <h:panelGroup id="display">
    	<ui:repeat var="inst" value="#{rechercheBean.rechercher()}">
                    ...
            </ui:repeat>
    </h:panelGroup>
    Ce code n'a pas grand interet si ce n'est que finalement c'est lui qui lance la requette SQL et qui la traite, et non le click sur le bouton...


    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
     
    @ManagedBean
    @ViewScoped
    public class RechercheBean implements Serializable
    {
    private int info;
     
    ...
     
    public void addInfo(ActionEvent actionEvent) 
        {  
        	if (info == 1)
        	{
        		FacesContext.getCurrentInstance().addMessage("message", new FacesMessage(FacesMessage.SEVERITY_INFO,"Test", "Pas de résultats"));
        	}
        	else if (info == 2)
        	{
        		FacesContext.getCurrentInstance().addMessage("message", new FacesMessage(FacesMessage.SEVERITY_FATAL,"Nombre de caractères insuffisants", "Entrez au minimum 3 caractères"));
        	}
        }  
    }
    Je ne vous met pas la fonction recherche, je ne pense pas qu'elle ai un grand interet...

    Ce code fonctionne très bien si ce n'est que l'update est exécuté après l'actionListener. Et moi je voudrais que ce sois l'inverse. Dans mon update je lance ma recherche, j'actualise ma portion de page, et j'associe une valeur à ma variable info (correspondant au message que je veux afficher). Et ensuite je voudrais pouvoir afficher le message correspondant.

    Actuellement si je clic une fois : ma page s'actualise nickel, mais aucun message n'apparait.
    Je clic une seconde fois, le message correspondant à ma 1ere action apparait.
    Et si je continu j'ai toujours un décalage entre le message correspondant à l'ancienne page affichée, et la nouvelle page.

    J'ai vu sur un forum que c'était normal que l'update est toujours exécuté après l'actionListener. Mais vu comment j'ai codé je vois pas trop comment y toucher pour avoir le résultat attendu...

    Si quelqu'un à une idée... Merci beaucoup

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour,

    Effectivement, je pense que tu n'envisage pas le fonctionnement du composent correctement !
    Pourtant tu décris bien ce que tu veux, et dans le bon ordre :
    Citation Envoyé par Lolosan Voir le message
    Quand l'utilisateur a saisi son texte et cliqué sur le bouton, la recherche va se lancer. Cette recherche est une requette SQL sur ma base de donnée. Suivant si elle trouve ou non un resultat, je stock dans une variable un message. Une fois finie elle va me mettre à jour un panelGroup dans ma page qui lui pourra afficher le résultat.
    Dans un second temps, je voudrais afficher le message.
    Ton problème est que tu ne fais pas ce que tu décris .... Normalement, dans l'actionListener tu lances ta recherche et ensuite tu rafraichis ton panel.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut
    Oui mais le problème c'est que je ne vois pas comment utiliser les messages de PrimeFaces sans le mettre dans l'actionListener. Et je ne vois pas non plus comment mettre ma page à jour sans l'update.

    Dans la partie que je veux mettre à jour j'ai besoin d'une liste d'objet, que ma requette me renvoi, pour pouvoir la mettre en forme pour l'utilisateur. S'il y a une maniere de déporter l'appel à ma recherche dans un event "onClick" (ou un autre) et de pouvoir faire tout de meme mon itération sur mes objets plus bas dans le code dites le moi.

    Je suis au début de mon développement donc c'est le moment de tout refaire ^^. J'ai juste besoin de conseils.

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Ok je vais t'aider mais on va y aller par étape !

    Les messages on vera ca plus tard ... commençons dans un 1er temps par ce que tu veux afficher
    Citation Envoyé par Lolosan Voir le message
    Dans la partie que je veux mettre à jour j'ai besoin d'une liste d'objet, que ma requette me renvoi
    Tu veux dire quoi par liste d'objet, que veux tu afficher et comment veux tu l'afficher (liste, tableau, zone de texte ....) ?
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 146
    Par défaut
    En fait ma fonction rechercher() de mon rechercheBean me retroune une liste d'instance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public List<Instance> rechercher()
    Je recupere cette liste grâce à ui:repeat. Et je fais ma mise en page :

    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
     
    <h:panelGroup id="display">
    	<div class="galerie">	
    		<div class="conteneur">
    			 <ui:repeat var="inst" value="#{rechercheBean.rechercher()}">
    				<div class="boite" id="recherche#{inst.sid}">
    					<p:commandLink id="recherche">  
    						<h:outputText value="#{inst.sid}" style="color:black;"/>  
    					</p:commandLink>
    				</div> 
     
    				<p:overlayPanel id="pane#{inst.sid}" for="recherche" hideEffect="fade">  
    					Action 1 <br></br>
    					Action 2 <br></br>
    					Action 3 <br></br>
    					#{inst.sid} <br></br>
    					<h:commandLink action="instance" value="Informations">
    						<ui:param name="instanceParam" value="#{inst}"/> 
    					</h:commandLink>
    				</p:overlayPanel>  
    			 </ui:repeat>
    			 <hr class="clear" />
    		</div>
    	</div>
     </h:panelGroup>
    La premiere partie correspond à cet affichage :
    Nom : num1.jpg
Affichages : 879
Taille : 5,7 Ko

    La seconde partie correspond à un overlay :
    Nom : num2.jpg
Affichages : 895
Taille : 11,1 Ko

    En gros j’itère sur une liste d'instance et pour chaque instance je l'affiche et lui associe un overlay. A chaque fois que l'utilisateur saisie une nouvelle valeur j'ai besoin que le panel se mette à jour.

    Si je suis pas très claire il faut me le dire.

  6. #6
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Bon, ton rechercheBean est en ViewScoped, donc pourquoi ne pas séparer la recherche de la récupération de la liste !
    L'actionListener du bouton appel rechercher() qui ne retroune plus rien, mais en contre partie tu stock en variable d'instance le résultat de la recherche.
    Ensuite, tu met en place les getter / setteur sur la liste. Getter qui sera appeler par le repeat.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [Conception] MVC - Déclarer l'écouteur d'evenement dans la vue.
    Par etiennegaloup dans le forum Général Java
    Réponses: 9
    Dernier message: 04/01/2006, 18h50
  2. evenements dans champ texte
    Par KAZA51 dans le forum IHM
    Réponses: 6
    Dernier message: 12/09/2005, 17h00
  3. ajout evenements dans le fichier CSS
    Par cosminutza dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 20/11/2004, 14h50
  4. [VB.Net]Evenement dans un Repeater !!
    Par m-mas dans le forum ASP.NET
    Réponses: 2
    Dernier message: 24/09/2004, 17h13
  5. Réponses: 4
    Dernier message: 02/06/2004, 16h35

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