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 :

Désactiver un commandButton après avoir cliqué


Sujet :

JSF Java

Vue hybride

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 279
    Par défaut Désactiver un commandButton après avoir cliqué
    Bonjour,

    Lorsque je clic sur le bouton "export", je fais un export des lignes d'une table vers un fichier Excel.

    Ce traitement peut etre long en fonction du nombre de lignes de la table (prend plus d'une minute)

    Au cours de l'export, je veux desactiver le button pour ne pas re-cliquer (refaire le traitement en cours) et le réactiver à la fin de l'export

    Pendant l'export le navigateur montre qu'il y'a un traitement en cours non terminé (c'est normal parceque ca correspond au submit)

    J'ai utiliser un boolean pour desactiver mais le commandButton ne se met pas à jour, pareil avec un binding; voici le code jsf utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <h:commandButton styleClass="inputbtn" style="margin-left:2px" 
    							value="#{bundle['prompt.notesDeService.recherchePrixTransport.exporterPrix']}"
    							action="#{recherchePrixTransport.bean.exporter}"  
    							rendered="#{recherchePrixTransport.bean.saisieValide}"
    							disabled="#{recherchePrixTransport.bean.exportButtonClicked}"
    							actionListener="#{recherchePrixTransport.bean.exporterListener}"
    							binding="#{recherchePrixTransport.bean.exportButton}"/>
    Je ne sais pas s'il y'a une solution pour desactiver le button en cours du traitement

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Par défaut
    Rajoute un onclick juste ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <h:commandButton styleClass="inputbtn" style="margin-left:2px" 
    							value="#{bundle['prompt.notesDeService.recherchePrixTransport.exporterPrix']}"
    							onclick="this.disabled = true; "
    							action="#{recherchePrixTransport.bean.exporter}"  
    							rendered="#{recherchePrixTransport.bean.saisieValide}"
    							disabled="#{recherchePrixTransport.bean.exportButtonClicked}"
    							actionListener="#{recherchePrixTransport.bean.exporterListener}"
    							binding="#{recherchePrixTransport.bean.exportButton}"/>

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 279
    Par défaut
    Citation Envoyé par ticroch Voir le message
    Rajoute un onclick juste ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <h:commandButton styleClass="inputbtn" style="margin-left:2px" 
    							value="#{bundle['prompt.notesDeService.recherchePrixTransport.exporterPrix']}"
    							onclick="this.disabled = true; "
    							action="#{recherchePrixTransport.bean.exporter}"  
    							rendered="#{recherchePrixTransport.bean.saisieValide}"
    							disabled="#{recherchePrixTransport.bean.exportButtonClicked}"
    							actionListener="#{recherchePrixTransport.bean.exporterListener}"
    							binding="#{recherchePrixTransport.bean.exportButton}"/>
    En ajout "onclick" le bouton se desactive mais l'action n'est pas eu lieu...ca ne se passe rien apres le clic sur le commandButton

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2009
    Messages
    282
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 282
    Par défaut
    Ah c'est que le onclick a du écraser l'autre évènement ... Je ne connais pas trop JSF donc je peux pas t'aider dsl, je sais faire ces trucs la juste en JavaScript ....

  5. #5
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Le problème est le suivant :
    quand l'utilisateur clique sur le bouton, celui-ci va se désactiver avant de traiter la demande (i.e. l'envoi du formulaire). Or en se désactivant, il refusera de traiter la demande

    Pour résoudre ton problème, il te suffit de décaler la désactivation du bouton de quelques dizaines de ms, ce qui empêchera donc l'utilisateur de cliquer à nouveau sur le bouton, mais qui n'empêchera pas la soumission du formulaire.

    Pour ce faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <h:commandButton ... onclick="disableMe(this.id);"/>
     
    <script type="text/javascript">
    function disableMe(btnId) {
        setTimeout("document.getElementById('" + btnId + "').disabled = true;", 10);
    }
    </script>
    (oui, il y a des façons plus élégantes de faire, mais bon)
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 279
    Par défaut
    Merci Romain, le bouton se désactive et l'action se fait correctement.

    ça me reste seulement à le réactiver quand l'action se termine automatiquement

    Citation Envoyé par romaintaz Voir le message
    Le problème est le suivant :
    quand l'utilisateur clique sur le bouton, celui-ci va se désactiver avant de traiter la demande (i.e. l'envoi du formulaire). Or en se désactivant, il refusera de traiter la demande

    Pour résoudre ton problème, il te suffit de décaler la désactivation du bouton de quelques dizaines de ms, ce qui empêchera donc l'utilisateur de cliquer à nouveau sur le bouton, mais qui n'empêchera pas la soumission du formulaire.

    Pour ce faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <h:commandButton ... onclick="disableMe(this.id);"/>
     
    <script type="text/javascript">
    function disableMe(btnId) {
        setTimeout("document.getElementById('" + btnId + "').disabled = true;", 10);
    }
    </script>
    (oui, il y a des façons plus élégantes de faire, mais bon)

Discussions similaires

  1. Problème après avoir cliqué sur le bouton de débogage
    Par nogard dans le forum Qt Creator
    Réponses: 0
    Dernier message: 22/04/2011, 19h37
  2. Réponses: 1
    Dernier message: 15/01/2010, 15h41
  3. Cacher un bouton après avoir cliqué dessus
    Par baila dans le forum IHM
    Réponses: 8
    Dernier message: 09/10/2007, 17h29
  4. Réponses: 2
    Dernier message: 04/03/2007, 18h40
  5. Réponses: 1
    Dernier message: 22/08/2006, 12h07

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