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

Servlets/JSP Java Discussion :

Bloquer le bouton submit le temps du traitement


Sujet :

Servlets/JSP Java

Vue hybride

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 72
    Par défaut Bloquer le bouton submit le temps du traitement
    bonjour

    Je suis actuellement sur une application de type 2-tiers avec struts , spring, hibernate et je tourne en local.

    Mon soucis est que quand je clique sur le submit de mon formulaire, le temps de traitement laisse le temps de cliquer de nombreuses fois sur le bouton submit.

    Si il y'a une erreur dans le formulaire, je laisse le formulaire actif (j'utilise jstl core) donc pas de soucis.

    Seulement si le formulaire est bon, le temps de le cacher, l'utilisateur impatient aura surement cliqué 3 - 4 fois le temps du retour (et donc 3 - 4 inscriptions identiques dans la base).

    Je suis parti sur l'idée de "cacher" ou de "griser" le bouton submit le temps d'avoir un retour.

    Seulement voila je ne vois pas trop comment faire pour "cacher le bouton sur l'appel" et surtout le faire réapparaitre uniquement sur la fin de traitement.

    Auriez-vous des atuces ou conseils ?

  2. #2
    Membre émérite Avatar de Lorantus
    Homme Profil pro
    Consultant développeur indépendant / Java/VB/C(++)/ObjectPal
    Inscrit en
    Août 2007
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant développeur indépendant / Java/VB/C(++)/ObjectPal

    Informations forums :
    Inscription : Août 2007
    Messages : 599
    Par défaut
    J'ai eu le même probléme que toi.

    L'opérateur ne pouvait pas attendre le temps du traitement et de la réponse (et le temps des couches réseaux). Alors il cliquait sur le bouton de traitement toutes les 2 secondes -preuves à l'appui avec un log mouchard.

    L'effet pervert, c'est que le temps de traitement était d'autant rallongé : 1er traitement.... 2iéme traitement... attente donc du 1er fini pour réponse, et réponse du 1er dans le vide, car le 2ieme traitement à fermer le flux de réponse du 1er... Finallement, il clique 5 fois, attente = 5x plus long: il verra que le résultat du dernier traitement. L'opérateur à l'impression que ça "rame". Et le produit final -le site- n'est pas rapide, voir carrément lent... Tout cela car le traitement pouvait prendre 4 secondes, et que l'opérateur n'avait pas la patience d'attendre. Ca fait chere à la fin....

    Deux solutions :
    - dire à l'opérateur que c'est un bourin, et qu'il est nul
    - trouver la parade dont tu parles
    Je préfere de loin la 2iéme solution.

    J'ai opté pour un bloquage complet de la page, le temps du traitement. Le bloquage d'un bouton n'interdit pas le clique des autres. Comme chaque clique de bouton correspond à 'submit', donc un nouveau flux de réponse -et le 1er travaille pour rien, car le flux de réponse il a été fermé : surcharge serveur. Le bloquage de la page compléte avec un message d'attente rend bien, et montre un traitement en cours. Tu peux aussi bloquer le bouton, et au bout de 0,8s bloquer la page, par exemple.

    J'utilise pour cela un javascript sur le submit -ou lors d'un déchargement de la page, il se charge de mettre en route un timer permettant de dire à quel moment la page se bloque (0,8s par exemple). Le timer evite d'avoir un bloquage de la page visible même pour les traitement court -effet de flash pas agréable.

    Le bloquage est obtenu par un jeux avec le CSS et le script. En gros, j'affiche un image semi-transparente, en gif, ou format suportant le mode transparent (2x2 pixels gris, 2x2 pixels transparent, le tout sur un damier de 2x2 : carré de 4x4 pixels, mais les damiers peuvent être plus gros, et limite l'effet de voilage grisé). L'image s'affiche sur un z-index, 1000 par exemple, et se répéte en x et y pour être complement par dessus la page. Un petit message en haut à gauche informe l'opérateur 'Traitement en cours... Veuillez patienter...', et le nec, un petit gif d'animation qui montre un traitement (animation cyclique du temps qui passe). C'est un simple <div/> qui fait tout cela à la dimension de la page -scroll inclus.

    Lorsque l'opérateur clique, un timer est mis en route, et la requête est envoyé au serveur. Si le serveur répond dans les temps, avant le timer, la page retournée s'affiche... etc. Par contre, si le serveur ne répond pas dans les temps, après le timer, la page est recouverte d'un voile gris et du message de patience. Lorsque le serveur répond, à la fin du traitement, la page retournée est affichée ... etc.

    C'est un effet sympat, et l'opérateur ne fait plus la surchage de requête, et le produit -site- va plus vite... Sans pour autant changer l'algo. de traitement.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 72
    Par défaut
    Donc si je comprend bien :

    - Je crée un calque (invisible) qui couvre toute la page.
    - Lors du clique, je rend ce calque visible et y affiche l'information de traitement
    et comme il est " au dessus" de toute la page il n'y à pas possibilité de cliquer.

    parcontre c'est ceci que j'aimerais beaucoup que tu m'explique :

    Si le serveur répond dans les temps, avant le timer, la page retournée s'affiche... etc. Par contre, si le serveur ne répond pas dans les temps, après le timer, la page est recouverte d'un voile gris et du message de patience. Lorsque le serveur répond, à la fin du traitement, la page retournée est affichée ... etc.
    je croyais qu'un retour ne changeait juste que le comportement du bloc dans lequel il définit. Donc si je comprend bien des que j'aurais mon retour mon bloc semi visible va disparaitre ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 72
    Par défaut
    Bon j'ai testé ta méthode.

    Ça passe impec !

    reste plus que j'apprennes à jouer avec les z-index et ca sera une réussite à 100%

    Merci beaucoup

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

Discussions similaires

  1. [MySQL] Traitement après clique sur bouton submit
    Par H-bil dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/05/2006, 13h29
  2. Transormer un lien bouton submit avec nom et valeur ?
    Par boteha dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 20/02/2005, 19h23
  3. Formulaire et bouton submit avec image mapée
    Par dody dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/12/2004, 16h00
  4. Javascript bouton submit
    Par lilou0210 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/11/2004, 11h40
  5. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 16h08

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