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 :

Envoyer un fichier a téléchargement avant de clore une pop up


Sujet :

JSF Java

  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut Envoyer un fichier a téléchargement avant de clore une pop up
    Hello,

    Je cherche a envoyé un fichier à télécharger à la fin d'une action (je génère un document xml quoi doit être ouvert par Word)

    je sais déjà qu'il faut récupérer la response depuis le l'external context et de définir le content type et le header de la réponse

    mais je ne sais pas comment récupérer mon fichier précédement créer et l'envoyé au client dois je simplement ouvrir mon fichier et faire un out.println du contenu ?

    D'avance merci

  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
    non tu dois ouvrir ton fichier et mettre son contenu dans l'outputStram de la response,
    tu peux le faire avec les classes de java.io

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    en cherchant un peu j ai trouvé le code suivante

    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
     
    FacesContext context = FacesContext.getCurrentInstance();
    			ExternalContext ec = context.getExternalContext();
    			HttpServletResponse response = (HttpServletResponse) ec
    					.getResponse();
    			response.reset();
    			response.setContentType("application/csv");
    			response.setHeader("Content-Disposition",
    					"filename=Repartition-Agence.csv");
    			response.setHeader("Content-Transfer-Encoding", "binary");
    			ServletOutputStream sop = response.getOutputStream();
    			StringBuffer sb = rechercheLocal.getRepartitionAgenceIris();
    			sop.write("mon;fichier;csv");
    			sop.flush();
    			context.responseComplete();
    je ne vois pas ou la récupération du contenu faite de sb est renvoyé au server ...

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    J'ai finalement coder ceci

    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
     
    /**
         * Send the document to the user
         * 
         * @param filename
         *                  The file to send to the browser
         * 
         */
        private void sendPermisDeConstruire (String filename) {
        	LOG.debug("sendPermisDeConstruire " + filename + ".xml"); 
        	File file = new File("C:\\" + filename + ".xml");    	
        	FileInputStream fis = null;
            BufferedInputStream bis = null;
            DataInputStream dis = null;    	       	
        	ExternalContext external = context.getExternalContext();
        	HttpServletResponse response = (HttpServletResponse) external.getResponse();
        	//formatage de la réponse
        	response.setContentType("application/octet-stream");
        	response.setHeader ("Content-Disposition", "attachment; filename=\"PermisDeConstruire.xml\"");
        	ServletOutputStream out;
        	try {
                fis = new FileInputStream(file);
        		out = response.getOutputStream();
                bis = new BufferedInputStream(fis);
                dis = new DataInputStream(bis);
                // dis.available() returns 0 if the file does not have more lines.
                while (dis.available() != 0) {          	
                	String line = dis.readLine();
                	System.out.println(line);
                	out.write(line.getBytes());              
                }
        		out.flush();
                context.responseComplete();
        	}catch (Exception ex) {
        		LOG.error("Error while getting an outputstream from the response" + ex.getMessage());
        	}finally {
        		try {
    	    		fis.close();
    	    		bis.close();
    	    		dis.close();
        		}catch (Exception ex) {
        			LOG.error("Error while closing the file" + ex.getMessage());
        		}
        	}
     
     
        }
    le problème est que rien n'est renvoyé au client ... pas d exception la lecture du fichier se passe bien mais aucune fenêtre avec save sa n'apparait

    une piste ?

  5. #5
    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
    montre le code qui appelle cette fonction!

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    c'est appellé après la création du document xml pour word

    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
     
     /**
         * Create a permis de construire document based on a template
         */
        public void createPermisDeConstruireDocument() {
        	File file = new File("C:\\fiche_1.xml");
        	FileInputStream fis = null;
            BufferedInputStream bis = null;
            DataInputStream dis = null;    	    
        	FileOutputStream out; // declare a file output object
            PrintStream p; // declare a print stream object
            String fileName = "";
            try {
            	String commune = selectedAffaireBean.getAffaire().getCommunes().iterator().next().getLibelleFr();
            	String mimeEncoding = "8859_1";
            	fileName = selectedAffaireBean.getAffaire().getNoAffaire();
            	out = new FileOutputStream("C:\\" + fileName + ".xml");
            	OutputStreamWriter outW  = new OutputStreamWriter(out, mimeEncoding);        	
                // Connect print stream to the output stream
                p = new PrintStream( out );
                fis = new FileInputStream(file);
                // Here BufferedInputStream is added for fast reading.
                bis = new BufferedInputStream(fis);
                dis = new DataInputStream(bis);
                // dis.available() returns 0 if the file does not have more lines.
                while (dis.available() != 0) {          	
                	String line = dis.readLine();
                	line = line.replace("$commune", commune);          
                	outW.write(line);
                }
                outW.flush();            
                outW.close();
                p.close();               
            }catch (Exception ex) {
            	System.out.println("Exception : " + ex.getMessage());
            }finally {
            	try{
            	 fis.close();
            	 sendPermisDeConstruire(fileName); 
            	}catch (Exception ex) {
            		LOG.error("Error once closing file input stream");
            	}
     
            }
        }

  7. #7
    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
    le code JSF dans le XHTML ou JSF

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    c'est un bouton qui fait appel à la méthode ${session.maMethode} et ma méthode fait appel a createPermisDeConstruireDocument je poste le code quand je suis de retour au bureau ...

  9. #9
    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
    c'est un

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    c'est ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <ice:commandButton id="buttonOk" value="Valider"
    actionListener="#{sessionBean.doAddOrModify}" />

  11. #11
    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
    essaye avec

  12. #12
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    non ca ne change rien

    j ai également tenté de modifier 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
     
      private void sendPermisDeConstruire (String filename) {
        	LOG.debug("sendPermisDeConstruire " + filename + ".xml"); 
        	File file = new File("C:\\" + filename + ".xml");    	
        	BufferedInputStream input = null;
        	ExternalContext external = context.getExternalContext();
        	HttpServletResponse response = (HttpServletResponse) external.getResponse();
        	//formatage de la réponse
        	response.setContentType("application/octet-stream");
        	response.setHeader ("Content-Disposition", "attachment; filename=\"PermisDeConstruire.xml\"");
        	ServletOutputStream out = null;
        	try {
        		 // Get file.
                input = new BufferedInputStream(new FileInputStream(file));
                int contentLength = input.available();
                response.setContentLength(contentLength);
             // Write file contents to response.
                while (contentLength-- > 0) {
                	System.out.print(input.read());
                    response.getOutputStream().write(input.read());
                }     
                // Finalize task.
                context.responseComplete();
        	}catch (Exception ex) {
        		LOG.error("Error while getting an outputstream from the response" + ex.getMessage());
        	}finally {
        		try {
        	         input.close();
        	    } catch (IOException e) {    	                 	              	
        	   }
        	}
        }
    le fichier est bien lu mais la réponse n est pas renvoyé au client ...

  13. #13
    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 en mettant le content-type text/xml?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.setContentType("text/xml");

  14. #14
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    non rien n y fait, j ai aussi pensé à un moment à un probleme de mime type définit par weblogic

  15. #15
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    et il est possible de créer quelque chose du genre

    ou le lien html apparait qu apres avoir clické sur une action (c'est cette action qui va setter la valeur de linkWordDocument)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="${sessionBean.linkWordDocument} }>Word</a>

  16. #16
    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
    tu as essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <h:commandButton id="buttonOk" value="Valider"
    action="#{sessionBean.doAddOrModify}" />

  17. #17
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    yep, je suis entrain d essayer de faire quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <h:commandLink id="linkWord" action="" onclick="javascript:window.open('#{sessionBean.linkWordDocument}');" rendered="${sessionBean.enableCreateWordDocument}">
    <h:outputText value="Lien sur le document Word"/>
    </h:commandLink>
    mais le problème c'est que ce lien n'apparait pas lorsque l'utilisateur click le bouton valider (qui lance le processus de création d affaire) car il n y a pas de raffraichessement de la pop up ...

    lorsque le processus de création d affaire est lancé je force le set de linkWordDocument et je set enableWordDocument à true

  18. #18
    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
    tu n' toujours pas répondu à ma question..
    as tu essayer avec??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <h:commandButton value="Valider" action="#{bean.dowloadFile}" />
    la méthode de ton bean mets le flux du fichier dans la response.

  19. #19
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    désolé oui j'avais bien entendu tester

    alors en fait j ai trouvé la solution, icesfaces ne supporte pas ce type de réponse il faut à partir de l'external context faire un redirect sur une servlet

    http://www.icefaces.org/JForum/posts/list/6233.page

  20. #20
    Membre éprouvé Avatar de nin2
    Profil pro
    Inscrit en
    Février 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Février 2005
    Messages : 100
    Par défaut
    Bonjour *alexandre*

    Je rencontre le même genre de soucis que toi. La solution du redirect vers une servlet me plait bien.
    Aurais-tu un exemple de code STP ?
    (Dans le lien que tu as donné, je ne vois rien concernant un redirect vers une Servlet )

    Merci d'avance à toi.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/03/2011, 02h52
  2. [VB.NET] [PPC] Envoyer/Recevoir fichiers PC<->PPC
    Par anthony70 dans le forum Windows Forms
    Réponses: 10
    Dernier message: 18/08/2008, 18h05
  3. Envoyer un fichier texte sur un port IP ?
    Par jnc dans le forum Web & réseau
    Réponses: 4
    Dernier message: 19/07/2005, 12h01
  4. Quel langage pour envoyer un fichier sur une adresse
    Par dai.kaioh dans le forum Développement
    Réponses: 2
    Dernier message: 02/04/2004, 17h38
  5. Réponses: 1
    Dernier message: 19/08/2003, 17h11

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