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 :

Envoyer un flux dans la réponse et faire un forward vers une jsp


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut Envoyer un flux dans la réponse et faire un forward vers une jsp
    bonjour,

    dans une méthode, je cree un fichier EXCEL en utilisant jexcel api voila comment je fais :
    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
     
    recepList=recepForm.getRecepList();
    WritableWorkbook classeur = Workbook.createWorkbook (new File ( "&output&.xls")); 
     
    		 WritableSheet sheet = classeur.createSheet("First Sheet", 0); 
    for (int j=0;j<recepList.size();j++){
    		    	Recep recep1 = (Recep) recepList.get(j) ;
    		    	System.out.println(j);
     
    			   String art1=recep1.getArticle();
    			   System.out.println(art1);
     
    			   String nd=recep1.getND();
    			   System.out.println(nd);
     
    			   String nf=recep1.getNF();
    			   System.out.println(nf);
     
    			   String prof=recep1.getProfil();
    			   System.out.println(prof);
     
     Label label = new Label(1, j+1, art1); 
    	      sheet.addCell(label);   
     
    	      Label label1 = new Label(2, j+1, nd); 
    	      sheet.addCell(label1); 
     
    	      Label label2 = new Label(3,j+1, nf); 
    	      sheet.addCell(label2); 
     
    	      Label label3 = new Label(4, j+1, prof); 
    	      sheet.addCell(label3); 
     
     
    		   }
     
    		 classeur.write();  
    		 classeur.close();
    et pour lire le fichier excel j'utilise la lecteur du flux comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    response.setContentType("application/octet-stream");
    		 response.setHeader("Content-Disposition","attachment; filename=\"&output&.xls\"");
    		 // Calculer le flux à renvoyer au client
    		 FileInputStream is = new FileInputStream("&output&.xls");
    		 byte buffer[] = new byte[1024];
    		 int nbLecture;
    		 // Envoyer le flux dans la réponse
    		 OutputStream os = response.getOutputStream();
    		 while ((nbLecture = is.read(buffer)) != -1) {
    		  os.write(buffer, 0, nbLecture);
    		 }
    		 os.close();
    ensuit je fais un forward :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return mapping.findForward("test2");
    ça marche bien il me génère le fichier excel et l'ouvre mais ne fait le forward vers la jsp
    voici le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Impossible d'utiliser faire-suivre (forward) après que la réponse ait été envoyée
    c'est pas possible de lire le fichier et faire un forward vers une jsp ??
    comment je fais j'ai besoin de faire ça??
    sinon comment ouvrir le fichier excel sans utiliser la lecteur du flux car je pense que c'est elle qui pose prob ??

    merci de me répondre

  2. #2
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    j'essaie de faire quelque chose d'assez semblable à vous. La différence c'est que je génère un fichier CSV.

    J'ai essayé de jouer avec la response pour rediriger le navigateur sur une nouvelle page. Mais dans les faits, il n'y a qu'une seule chose qui se produit : soit le fichier est streamer chez le client, soit le forward est exécutée.

    Peu importe, une fois que la response est commitée, on ne peut plus rien faire avec. N'y a-t-il pas moyen de retourné une réponse en multipart, sois le stream et le forward en même temps ?

  3. #3
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    en tous les cas moi j'ai résolu le problème de la manière suivante
    je fais d'abord le forward ensuit dans le "onload" de la jsp
    j'ai une fonction qui va éxécuter la méthode ou je génère mon pdf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <body onload="valider();">
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       function valider()   
        {
    setHidden('rapport',document.etaStkForm)
     etaStkForm.submit(); 
    }

  4. #4
    Candidat au Club
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Votre fonction valider elle fait quoi ?

    J'ai pensé également à une autre solution que je n'ai pas essayé. Faire un autre submit lancer par un timer. Je pourrais rajouter un champs qui me permettrait d'exécuter ou non la génération de fichier.

    Merci pour votre solution.

    Citation Envoyé par john_wili Voir le message
    en tous les cas moi j'ai résolu le problème de la manière suivante
    je fais d'abord le forward ensuit dans le "onload" de la jsp
    j'ai une fonction qui va éxécuter la méthode ou je génère mon pdf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <body onload="valider();">
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       function valider()   
        {
    setHidden('rapport',document.etaStkForm)
     etaStkForm.submit(); 
    }

  5. #5
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    394
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 394
    Points : 73
    Points
    73
    Par défaut
    Votre fonction valider elle fait quoi ?
    dans la fonction valider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function valider()   
        {
    setHidden('rapport',document.etaStkForm)
     etaStkForm.submit(); 
    }
    je précise le hidden et je submit le form pour exécuter la méthode 'rapport' de ma dispatchAction qui me génère mon fichier "pdf"
    et le lit en utlilisant la lecteur du flux (response)

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/07/2009, 18h55
  2. faire un lien vers une photo type en l'absence de la photo recheché
    Par db48752b dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/11/2008, 08h51
  3. Faire un lien vers une page web
    Par Invité(e) dans le forum Applets
    Réponses: 2
    Dernier message: 21/05/2008, 11h03
  4. [VBA]faire un lien vers une page internet
    Par db48752b dans le forum IHM
    Réponses: 3
    Dernier message: 23/04/2007, 15h37
  5. Faire un raccoucis vers une application sous wine
    Par zamanika dans le forum Applications et environnements graphiques
    Réponses: 7
    Dernier message: 01/10/2004, 14h10

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