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 :

[Struts]Response already committed [FAQ]


Sujet :

Struts 1 Java

  1. #1
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Points : 174
    Points
    174
    Par défaut [Struts]Response already committed
    Bonjour,

    Je me suis basé sur l'exemple de la FAQ pour envoyer au client un fichier avec Struts. Voici mon code :

    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
     
    ByteArrayOutputStream out = new ByteArrayOutputStream();
     
    // export excel
    ExportExcel export = new ExportExcel();
     
    response.setContentType(export.getMimeType());
    response.setHeader("Content-disposition", "filename=rechOrganeConso.xls");
    					                   export.setParameters(model, true, true, true);
     
    export.doExport(out);				
     
    OutputStream outFinal = new BufferedOutputStream(response.getOutputStream());
     
    outFinal.write(out.toByteArray());
     
    outFinal.flush();
    out.close();
    outFinal.close();
    L'export Excel marche bien, mais le forward echoue a cause de l'exception suivante :

    java.lang.IllegalStateException: Cannot forward. Response already committed.
    Pouvez-vous m'expliquer qu'est ce que je ne fais pas dans le bon ordre ou ce qui ne va pas dans ce bout de code ?
    D'avance merci !

    La7su
    The path of excess
    leads to the tower of wisdom.
    (Enigma)

  2. #2
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut Re: [Struts]Response already committed
    Citation Envoyé par la7su
    Pouvez-vous m'expliquer qu'est ce que je ne fais pas dans le bon ordre ou ce qui ne va pas dans ce bout de code ?
    D'avance merci !

    La7su
    Qu'est ce que tu fais comme return après cette fonction?

    Pourquoi ne pas exporter le fichier excel directement dans le outputstream de ta réponse? Le ByteArrayOutputStream ne sert à mon avis à rien du tout....

  3. #3
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Points : 174
    Points
    174
    Par défaut
    en fin d'action je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return mapping.findForward(target);
    Pourquoi ne pas exporter le fichier excel directement dans le outputstream de ta réponse? Le ByteArrayOutputStream ne sert à mon avis à rien du tout....
    Oui c'est juste, j'avais essayé cette méthode car je n'ai pas la main sur l'écriture de l'excel dans l'outputstream passé en parametre de l'export excel, je voulais donc vérifier que le pb ne venais pas de la. Dsl, j'ai oublié de virer la modif.
    The path of excess
    leads to the tower of wisdom.
    (Enigma)

  4. #4
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par la7su
    en fin d'action je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return mapping.findForward(target);
    Ben voila ton problème....

    Si la réponse est générée dans l'Action et est fermée dedans, tu ne peux plus rien écrire d'autre dedans, et donc le seul forward que tu puisses renvoyer à la fin de la méthode est:

  5. #5
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Points : 174
    Points
    174
    Par défaut
    Ok mais quelle est la différence entre ce que je fais et ce qui est fait dans la FAQ ?

    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
     
     
    response.setContentType("multipart/zip"); 
    response.setHeader("Content-Disposition",
                       "attachment; filename=\"" + 
                       filename.trim().substring(1,filename.length()) + "\";"); 
    response.setContentLength((int)f.length()); 
     
    try
    {
          OutputStream os = response.getOutputStream();
          FileInputStream stream = new FileInputStream(f);
          BufferedInputStream  bis = new BufferedInputStream(stream);
          InputStream is = new BufferedInputStream(bis);
          int count;
          byte buf[] = new byte[4096];
          while ((count = is.read(buf)) > -1)
          {
              os.write(buf, 0, count);
          }
          is.close(); 
          os.close();
    }
    catch (Exception ex)
    { 
       ex.printStackTrace();
    }
    ..
    return mapping.findforward("fichieenvoye");
    A moins que le mapping.findForward("fichieenvoye") renvoie null (dans ce cas je pouvais pas le deviner...) je ne vois pas ce qui cloche dans ce que je fais...

    En tout cas merci de ta reponse denisC !
    The path of excess
    leads to the tower of wisdom.
    (Enigma)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/06/2011, 09h51
  2. Réponses: 2
    Dernier message: 19/08/2009, 15h03
  3. Réponses: 13
    Dernier message: 30/03/2007, 15h52
  4. [JSP] Response already commited
    Par c.pauline dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 14/02/2006, 17h30
  5. [STRUTS][ACTION]Ecriture d'un PDF dans la response
    Par woodwai dans le forum Struts 1
    Réponses: 10
    Dernier message: 23/02/2005, 10h26

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