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 :

[JSP]Problème de double soumission d'un formulaire


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 199
    Points : 66
    Points
    66
    Par défaut [JSP]Problème de double soumission d'un formulaire
    Bonjour,
    J'essaie de générer un fichier de type "image/svg+xml" dans une nouvelle fenêtre. Dans ma jsp, j'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="button" onclick="displayPrint();" value="Afficher"/>
    où la fonction javascript displayPrint() est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function displayPrint() {
      windowOptions="toolbar=no,location=no,directories=no,status=yes,menubar=no,resizable=yes,copyhistory=no,scrollbars=yes,width=800,height=700";
      window.open('display.do?actionType=GENERATE","",windowOptions);
    }
    et dans la fonction doPerform de la classe action, j'ai le code 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
     
    public ActionForward doPerform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
      ...
      if (actionType.equalsIgnoreCase("GENERATE")) {
        //création du string buffer sb contenant le code xml
        byte[] file = sb.toString().getBytes();
        response.setContentType("image/svg+xml");
        response.setContentLength(sb.length());
        java.io.OutputStream out = response.getOutputStream();
        out.write(file);
        out.flush();
        out.close();
        return null;
      }
      ...
    }
    Tout fonctionne, cad le fichier s'affiche correctement dans une nouvelle fenêtre mais le problème est que tout le code de la classe action est parcouru 2 fois ! Comme si le formulaire (dans la jsp) était soumis 2 fois.
    Est-ce que quelqu'un aurait une idée ?
    Note : si je remplace le type "image/svg+xml" par "text/html", le fichier s'affiche sous format texte (ce qui n'est pas ce que je veux) mais au moins, le code n'est parcouru qu'une seule fois !
    Merci de m'aider à résoudre ce problème bien mystérieux...
    Julie




    [Modéré par Didier] : ajout de tag dans le titre - Les règles du forum Java

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    D'après le code que tu fournis, à aucun moment tu ne valides un formulaire.
    Tu ne fais qu'appeller une popup, avec une action.

    Tu pourrais reproduire la même chose, en ouvrant une fenêtre vierge et en collant le lien que tu utilises pour ta popup.

    Pour en revenir à ton problème, ce que je voulais dire c'est que je vois mal un quelconque formulaire être la cause de quoi que ce soit car tu n'en valides pas. J'aurais mieux compris si ton <input> avait été du type "submit", mais il n'en est rien. Il s'agit bien d'un button tout bête, qui ne fait aucune action de validation.

    Pour moi donc il s'agit bien d'un problème lié à ton action. Peux-tu copier-coller le bout qui nous interesse de ton struts-config.xml ? Tu dis que ça marche mieux avec txt ? Peut-être que tu affiches certaines choses dans ta page avant d'executer le code qui affichera ton svg+xml, et donc tu coups tu obliges un reload lors du setContentType. Je ne fais que deviner.

    Bonne chance,
    K

  3. #3
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Je sais qu'il existe un bug sous IE produisant ce probleme...
    Est ce que tu as essayé avec un autre navigateur?

    J'avais un probleme similaire il y a un petit moment.. normalement le post que j'avais fait dois toujours exister sur ce forum..

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 199
    Points : 66
    Points
    66
    Par défaut
    D'abord, merci pour la rapidité de ta réponse et pour ton aide.

    Voilà la partie de mon struts-config.xml pour l'action "display":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <action    path="/display"
                   type="com.cartostat.presentation.action.DisplayAction"
                   name="displayForm"
                   scope="request"
                   input="/mainmenu.do">
                   <forward   name="displayCreate" path="mapCreation"/>
                   <forward   name="failure" path="mainMenu"/>
    </action>
    Mais je ne vois pas en quoi ça a à voir avec mon pb puisque je fais un "return null;" dans ma classe action...

    Sinon, quel genre de choses je serais susceptible d'afficher dans ma page et qui obligeraient un reload lors du setContentType, comme tu le suggères ?

    Merci.
    Julie

    PS : je viens d'essayer avec un autre navigateur (FireFox) et la double validation n'a pas lieu !! Par contre, comme le fichier que j'essaie d'afficher est un fichier svg, il ne l'affiche pas (il me propose de l'ouvrir avec Adobe et comme le plugin d'Adobe pour lire les fichiers SVG fonctionne avec IE, il m'ouvre le fichier dans IE...).
    Donc, quelqu'un a-t-il une idée de comment résoudre (ou tout du moins contourner) ce bug d'IE puisque le fichier que j'essaie d'ouvrir ne s'ouvre qu'avec IE ?

  5. #5
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Le problème est surement du au fait que le navigateur initie sa popup en mode texte, et se rend compte ( après execution ) que le contentType a changé, et donc qu'il doit utiliser le plug-in adobe, et donc il fait un reload. Et etant donné que tu fais ton setContentType après avoir fait les traitements, ça implique qu'ils sont refait.

    Je parlais du struts-config car il se pouvait qu'il y ait une erreur au niveau des redirections etc, mais j'en doutais quand même un peu, c'était juste une piste.

    Pour solutionner le problème, tu pourrais utiliser la balise <EMBED> dans un document HTML, ainsi, il n'y aurait pas de reload car seul la partie embed serait utilisée par le plugin adobe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <embed src="tonfichier.svg" height="100" width="100" />
    En espérant que ça aide un peu,
    K

    PS : je ne suis pas sûr de la syntaxe EMBED avec un document svg, il y a peut-être d'autres paramètres.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 199
    Points : 66
    Points
    66
    Par défaut
    Je ne vois pas très bien comment faire pour générer dynamiquement le fichier html ET le fichier svg qui est appelé dans le fichier html ? Mettons que j'envoie à l'output le contenu du fichier html (<embed src="tonfichier.svg" height="100" width="100" />), comment se fait le lien avec "tonfichier.svg" ?
    Merci.

  7. #7
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Au lieu d'avoir une popup qui s'ouvre directement sur ton action, tu peux ouvrir ta popup sur une page html, qui dans l'element <EMBED> fait appel à ton action.

    Ce qui ( à mon avis ) pourrait enlever le problème de reload, car l'objet embed signalant le type de contenu dès le premier abord, le bon plug-in est chargé directement.

    Je suis désolé de ne pas avoir de réponse pour ton problème initial,
    K

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 199
    Points : 66
    Points
    66
    Par défaut
    Merci pour ton aide !
    Est-ce que tu pourrais être un petit peu plus précis quand tu dis : "qui dans l'element <EMBED> fait appel à ton action". Est-ce que tu pourrais me donner une idée du code ?
    Merci encore.
    Julie

  9. #9
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    J'imaginais un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <embed src="tonaction.do" height="100" width="100" />


    K

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 199
    Points : 66
    Points
    66
    Par défaut
    <embed src="tonaction.do" height="100" width="100" />
    Ca ne fonctionne pas : rien ne s'affiche.
    Si quelqu'un a une idée, merci de me tenir au courant car le problème est toujours d'actualité.
    En tout cas merci pour votre aide.
    Julie

  11. #11
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Je suis à peu près sûr que ça fonctionne.

    Il y a peut-être d'autres paramètres à transférer à embed, il faudrait faire une recherche sur google de svg + "<embed"

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 199
    Points : 66
    Points
    66
    Par défaut
    Bonjour,
    En effet, la ligne suivant fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <EMBED name="map" src="map.do?actionType=GENERATE&numid=2&denomid=1" width="800" height="600" type="image/svg+xml"> </EMBED>
    mais à condition que cette page soit une page html et non une jsp ! Et la classe action n'est alors bien appelée qu'une seule fois.
    Par ailleurs, comme tu vois, je dois passer des paramètres à l'url (numid et denomid) mais comment faire pour les passer de manière dynamique ? En d'autres termes, comment on fait dans une page html pour récupérer des paramètres ?
    Merci encore pour ton aide (si précieuse).
    Julie

  13. #13
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Je suis content que ça marche, par contre pourquoi est-ce que ça devrait obligatoirement être une page HTML ?
    Les pages JSP n'interdisent pas les EMBED si ?

    Ca te met un message d'erreur ?

  14. #14
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Au pire tu peux toujours faire une page JSP qui te fait un output de ces lignes Embed :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <%
       out.print("<EMBED ");
       out.print("name=\"map\" ");
      // etc..
    %>
    Il se peut que la balise EMBED ne soit pas acceptée ?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 199
    Points : 66
    Points
    66
    Par défaut
    non mais le code de la classe action est alors appelé deux fois !

  16. #16
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    hahahahaha

    Donc ok il y a un problème quelque part ailleurs que dans le header etc, ta méthode de départ devait être bonne.... hmm

    Où peut bien se trouver le problème ? Pour être sûr, il faudrait voir la totalité de ton struts-config.xml, et pareil pour ta servlet, envoi moi tout ça par email, je jète un oeil tout à l'heure, ou bien poste le ici aussi ( sauf si tu as pas envie que tout le monde regarde ton code )

  17. #17
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    hmm attend attend je réfléchi au truc là... Un truc étrange quand même !!

    Donc, quand ta page est en HTML, le code n'est appellé qu'une fois.. Alors que quand il est en jsp ( le résultat d'un JSP interprété est du html ma foi ) il l'execute 2 fois ?!

    Là y a un truc chelou, jte dit moi

  18. #18
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Si ça se trouve ça te fait ça pour toutes tes pages ?

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 199
    Points : 66
    Points
    66
    Par défaut
    non, parce que c'est le seul endroit où je génère du svg...
    Est-ce que tu as une idée pour le passage de paramètre, ou plutôt comment récupérer des paramètres dans une page html pour ensuite les réintroduire dans l'url ?
    Merci.

  20. #20
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Oui il y a un moyen en javascript, mais j'ai pas le code en tête, je ferais une recherche rapide ce soir en rentrant
    Bonne soirée !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Double soumission d'un formulaire
    Par Laskar dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/10/2013, 15h40
  2. Réponses: 6
    Dernier message: 24/04/2013, 17h14
  3. Réponses: 0
    Dernier message: 24/01/2012, 10h29
  4. [Servlets - JSP] Problème de session
    Par the java lover dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 28/11/2011, 09h54
  5. Réponses: 3
    Dernier message: 02/07/2007, 10h16

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