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

JSF Java Discussion :

Download de fichier


Sujet :

JSF Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut Download de fichier
    Bonjour,

    Je suis confronté à un nouveau problème, je dois crée un export d'une datatable vers un fichier excel (j'utilise jexcel api).
    Je pense avoir fait ce qu'il fallait par rapport a tout ce que j'ai pu trouver sur le net, mais mon fichier s'affiche en binaire dans ma page au lieu de proposer le téléchargement. Je pense a un problème du coté des header http et du faces context (peut etre un pb de navigation) mais je ne vois pas.

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    	FacesContext context = FacesContext.getCurrentInstance();
            ExternalContext ec = context.getExternalContext();
            HttpServletResponse response = (HttpServletResponse) ec.getResponse();
            response.reset();
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-Disposition", "attachment; filename=export.xls");
            response.setHeader("Content-Transfer-Encoding", "binary");
            ServletOutputStream sop = null;
            WritableWorkbook workbook = null;
            try {
    			sop = response.getOutputStream();
    			workbook = Workbook.createWorkbook(sop);
    		} catch (IOException e1) {
    			e1.printStackTrace();
    		}
     
    //*********************
    // remplissage du fichier excel
    //*********************
     
    		try{
    			workbook.write();
    			workbook.close();
    			sop.flush();
    			sop.close();
    			context.responseComplete(); 
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (WriteException e) {
    			e.printStackTrace();
    		}
    Toute idée sera la bienvenue.

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    et avec ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition", "attachment; filename=" + fileName + "");

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut
    Merci pour ta réponse sniper37, mais j'ai le meme comportement que cité au dessus

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par Breezy Voir le message
    Merci pour ta réponse sniper37, mais j'ai le meme comportement que cité au dessus
    ouii mais peu tu tester juste avec les deux lignes et enleve les autres response.XXX
    surtout celle là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.setHeader("Content-Transfer-Encoding", "binary");

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut
    meme comportement.

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    j'utilise l'api apache poi, voilà ce que 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
    OutputStream out;
    HSSFWorkbook wb = new HSSFWorkbook();
    ...
    ...
    		try {
    			out = response.getOutputStream();
     
    			wb.write(out);
    			out.close();
    			context.responseComplete();
    		} catch (IOException e) {
     
    			e.printStackTrace();
    		}
    si ça peut t'aider!!

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut
    Merci, je regarde ça demain et je te tiens au courant.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut
    Salut,

    Apres un petit laps de temps (j'ai du partir sur autre chose), je reviens sur mon problème.

    J'ai testé ce que tu me conseillais, et il ne se passe rien du tout.
    Je passe bien dans ma methode, mais le navigateur ne me propose pas d'enregistrer ou d'ouvrir le fichier excel généré.

    Voici le code de mon test :

    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
     
    		FacesContext context = FacesContext.getCurrentInstance();
    		ExternalContext external = context.getExternalContext();
    		HttpServletResponse response = (HttpServletResponse) external.getResponse();
     
    		response.setContentType("application/vnd.ms-excel");
    		response.setHeader ("Content-Disposition", "attachment; filename=\"test.xls\"" );
    		HSSFWorkbook wb = new HSSFWorkbook();
    		HSSFSheet sheet = wb.createSheet("new sheet" );
     
    		// Create a row and put some cells in it. Rows are 0 based.
    		HSSFRow row     = sheet.createRow((short)0);
     
    		// Create a cell and put a value in it.
    		HSSFCell cell   = row.createCell((short)0);
     
    		cell.setCellValue(1);
     
    		// Or do it on one line.
    		row.createCell((short)1).setCellValue(1.2);
    		row.createCell((short)2).setCellValue("This is a string" );
    		row.createCell((short)3).setCellValue(true);
    		// Write the output  
    		OutputStream out;
    		try {
    			out = response.getOutputStream();
     
    			wb.write(out);
    			out.close();
    			context.getResponseComplete();
    		} catch (IOException e) {
     
    			e.printStackTrace();
    		}
    Si quelqu'un a une idée, je suis preneur.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut
    J'ai trouvé la solution a mon problème et je la donne car elle pourra peut etre en aider certain.
    Il ne faut surtout pas utiliser de a4j:commandButton car on se retrouve avec un context MyFaces et un objet response ajax

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    context	        org.apache.myfaces.context.servlet.FacesContextImpl  (id=91)	
    external         org.apache.myfaces.context.servlet.ServletExternalContextImpl  (id=100)	
    response       org.ajax4jsf.webapp.FilterServletResponseWrapper  (id=103)	
    wb	         org.apache.poi.hssf.usermodel.HSSFWorkbook  (id=107)	
    sheet	        org.apache.poi.hssf.usermodel.HSSFSheet  (id=111)
    Je ne suis pas bien sur de ce que j'avance, mais en passant mon bouton en h:commandButton, cela fonctionne.

  10. #10
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    salut,

    c'est un probleme connu, il ne s'agit peut etre pas d'un vrai probleme, l'equipe Richfaces m'ont conseillé de ne pas utiliser a4j:commandButon que si il y'a un besoin d'utiliser Ajax et non pour une simple navigation par exemple.
    c'est vrai que le comportement de a4j:commandButton n'est pas le meme sous myfaces et JSF.

    @++

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 21/12/2005, 12h04
  2. download de fichier depuis un serveur web
    Par minusette dans le forum Modules
    Réponses: 9
    Dernier message: 14/10/2005, 09h10
  3. [Javabean/sun.net.ftp] Downloader un fichier txt
    Par benben13 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 13/09/2005, 16h43
  4. [C#] Download de fichier
    Par Scorff dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/06/2005, 10h09
  5. [VB.NET] Download de fichiers sur un serveur...
    Par Webman dans le forum ASP.NET
    Réponses: 3
    Dernier message: 19/05/2004, 10h25

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