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

Struts 1 Java Discussion :

Rechargement de page après envoi de fichier


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 30
    Par défaut Rechargement de page après envoi de fichier
    Bonjour,

    je vous explique mon problème.
    J'ai une application struts qui me permet via un formulaire de récupérer un fichier csv, de le traiter dans mon action et de le renvoyer après modification. Lors du clic sur le bouton envoyer pour envoyer le fichier vers l'action, j'affiche avec un javascript un gif qui représente une progressbar pour faire patienter l'utilisateur. Le problème c'est que lorsqu'il me retourne le fichier modifié, la page ne se recharge pas. Or j'ai besoin de réafficher la page en cours pour que l'image soit de nouveau cachée.
    Avez-vous une idée?
    J'espère avoir été claire.

  2. #2
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Au moment ou tu recupere ton fichier , tu masque ton image !
    Facile a dire, mais sans ton code pas evident. L idee c est d exceuter un javascript qui cache ton image ou alors qui fais une redirection vers la meme page

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 30
    Par défaut
    merci willoi, je sais pas si mon code sera très utile...
    dans mon action, j'envoi mon fichier dans la response :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    response.setContentType("text/csv; charset=ISO-8859-1");
    response.setHeader("Content-Disposition", "attachment; filename=\"fichierSortie.csv\";");
    PrintWriter writer = response.getWriter();
    après j'appele une function qui va écrire toutes les infos du fichier dans le writer avec des writer.writer(data);
    après cette écriture je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    writer.flush() 
    writer.close();
    le fichier est alors proposé en téléchargement à l'utilisateur mais çà se fait de manière automatique, je n'ai pas la main dessus.
    suite à cet envoi je souhaitais actualiser ma page alors à la fin de mon action je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return mapping.findforward('maPage');
    mais a ce moment là rien ne se passe, la page ne se réaffiche pas et je vois pas comment au niveau de ma jsp je peux savoir que le traitement est fini...

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Je ne vois pas trop où est le problème.
    Quand tu cliques sur le bouton tu actives ton javascript, tu envois les données au contrôleur, et le contrôleur (via le mnémonique et le paramétrage du style <forward name="ok" path="la_page_d'origine_a_afficher">) te réaffiche la page (et donc tu ne devrais plus avoir ta progressBar)

    Si tel n'est pas le cas, peux-tu montrer le code (page + contrôleur + config struts)

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 30
    Par défaut
    le forward marche très bien si je met en commentaire la partie d'envoi du fichier que j'ai decrit plus haut, la page se recharge sans problème donc le gif est de nouveau caché.
    A partir du moment où j'ajoute les deux lignes pour specifier le type de la reponse (fichier csv notamment) et que jécris dans la reponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    response.setContentType("text/csv; charset=ISO-8859-1");
    response.setHeader("Content-Disposition", "attachment; filename=\"fichierSortie.csv\";");
    le forward ne fonctionne plus....
    par contre le fichier m'est bien retourné...

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Oui, effectivement, j'ai répondu pendant que tu précisais, désolé...

    Directement, tu ne peux pas faire ce genre de chose, par contre, tu pourrais utiliser un <iframe> pour envoyer ta demande de modification/téléchargement. Il faudrait utiliser cette ressource pour la progressBar, comme ça, lorsque tu renvoies le fichier, elle devrait s'effacer (j'ai pas fais de test, mais c'est une idée)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 30
    Par défaut
    merci OButterlin, c'est bien ce que je pensais que çà ne fonctionnerais pas comme çà...
    par contre j'ai pas trop saisi ton idée de l'iframe en fait... si tu pouvais préciser un peu plus ton idée, je pourrais peut etre essayer quelquechose...

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Je test et je met en ordre tout ça... A tout à l'heure...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 30
    Par défaut
    merci beaucoup
    je regarde de mon coté ce que je peux trouver

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Désolé, j'ai été un peu à la ramasse...
    J'ai testé un concept, j'avoue que c'est assez usine à gaz mais ça fonctionne.
    Voici l'extrait du code de la page principale :
    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
     
    ...
        <html:form action="/login.do" focus="login"> 
        <input type="hidden" name="action" value="login" />
     ...
       </html:form>
    <script>
    var request = null;
    var timer = null;
     
    function submitRequest()
    {    
        iframe1.document.forms[0].submit();
        if (window.XMLHttpRequest) request = new XMLHttpRequest();     // Firefox, Safari, ...
        else if (window.ActiveXObject) request = new ActiveXObject("Microsoft.XMLHTTP");    // Internet Explorer
     
        timer = setInterval("checkResponse()", 500);
    }
     
    function checkResponse()
    {
        iframe1.waiting();
        request.open("POST", "<%=request.getContextPath()%>/login.do?action=checkActive", false);
        request.send(null);
        var r = request.responseText;
        if ( request.readyState == 4 )
        {
            window.status = "Réponse : " + r;
            if ( r == "0" )
            {
                clearInterval(timer);
                window.status = "OK";
                document.location.reload();
            }
        }    
        else window.status = "Veuillez attendre la fin du traitement...";
    }
     
    </script>
    <iframe name="iframe1" scrolling="no"  src="<%=request.getContextPath()%>/pages/tools/login/wait.jsp" height="20" width="400" frameborder="0">
    </iframe>
    ...

    de la page wait.jsp
    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
     
    <html>
    <head>
    <script>
    function waiting()
    {
        var d = document.getElementById("progress");
        var t = d.innerHTML;
     
        if ( t.length > 100 ) t = "-";
        else t += "-";
     
        document.getElementById("progress").innerHTML = t;
    }
    </script>
    </head>
     
    <body style="margin:0px;">
    <div id="progress" style="width:100%; background:#ffffff;"></div>
    <form action="<%=request.getContextPath()%>/login.do" method="post">
    <input type="hidden" name="action" value="download"/>
    </form>
     
    </body>
    et du contrôleur Struts
    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
     
    ...
        public ActionForward download(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
        {
            try
            {
    request.getSession().setAttribute("DOWNLOAD_PROGRESS_ACTIVE", "1");
                response.setContentType("text/html; charset=ISO-8859-1");
                response.setHeader("Content-Disposition", "attachment; filename=\"ApplicationResources.properties\";");
                File file = new File("c:/Temp/Phenix.war");
                InputStream in = new FileInputStream(file);
                ServletOutputStream out = response.getOutputStream();
                try
                {
                    int bit = in.read();
                    while( (bit) >= 0 )
                    {
                        out.write(bit);
                        bit = in.read();
                    }
                }
                catch (Throwable t)
                {
                    System.out.println("Erreur lors de l'opération download sur le fichier  : " + t.getMessage());
                }
                out.flush();
                out.close();
                in.close();
                request.getSession().setAttribute("DOWNLOAD_PROGRESS_ACTIVE", "0");
            }
            catch (Throwable t)
            {
                request.getSession().setAttribute("DOWNLOAD_PROGRESS_ACTIVE", "0");
            }
     
            return null;
        }
     
        public ActionForward checkActive(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
        {
            PrintWriter out = null;
            try
            {
                out = response.getWriter();
                String r = (String)request.getSession().getAttribute("DOWNLOAD_PROGRESS_ACTIVE");
                out.write( r );
            }
            catch (Exception e)
            {
            }
            out.close();
            return null;
        }
    ...
    Peut-être que ça t'inspirera...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 30
    Par défaut
    Merci beaucoup pour ta réponse.
    Je dois finir un truc ce matin donc je teste çà cet aprem, je te tiens au courant!

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 30
    Par défaut
    je viens de mettre en place ton procédé chez moi, jai fait quelques modifications pour que çà colle bien à mon code et çà marche impeccable.
    Je te remercie beaucoup pour l'aide que tu m'as apporté

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

Discussions similaires

  1. Recharger la page après fonction php
    Par leroidje dans le forum Langage
    Réponses: 3
    Dernier message: 08/10/2009, 16h31
  2. [javascript/html] Recharger une page après choix dans liste
    Par pitchoblack dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/04/2008, 16h58
  3. Réponses: 3
    Dernier message: 26/02/2008, 09h50
  4. [javascript/php]Recharger une page après choix dans liste déroulante
    Par eyango dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/01/2008, 13h34
  5. pb de redirection de page après envoi de formulaire
    Par mariah201083 dans le forum Langage
    Réponses: 3
    Dernier message: 14/06/2007, 16h44

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