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

Servlets/JSP Java Discussion :

getOutputStream() has already been called for this response


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut getOutputStream() has already been called for this response
    Bonjour,

    Après quelques recherches, j'ai vu un problème similaire ici :
    http://www.developpez.net/forums/d12...tateexception/

    ...mais pas la solution.

    Mon code javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var URL = "monAction.do?
    messageWindow =window.open(URL,"","status=no,toolbar=yes,menubar=yes,location=no,resizable=yes");
    Ensuite j'arrive dans le code java de mon action.

    Là, si j'appelle ma fonction closeWindow (cf code ci-dessous), aucun soucis.

    Sauf que cette fonction closeWindow, je veux l'appeler si j'ai un problème dans la création de mon flux Excel (qui commence par utiliser response.getOutputStream()).

    Et comme le dis le forum, on ne peut utiliser getOutputStream() et getWriter(); alors comment dois-je faire pour fermer ma fenêtre en cas de problème?



    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
    private void closeWindow(HttpServletResponse response)
    	{
    		try
    		{
    		myOutStream = response.getWriter();
              	myOutStream.println("<script language=\"javascript\">");
    		myOutStream.println("window.close();");
                    myOutStream.println("window.alert(\"An error has occured during Excel export\");");
    	        myOutStream.println("</script>");
    		}
    		catch (Exception e)
    		{
    			m_logger.error("Error in closeWindow function.", e);
    		}
    		finally
    		{
    			if (myOutStream != null){
    	    		myOutStream.flush();
    	    		myOutStream.close();
    	    	}
    		}
    	}

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Hello,

    J'ai pas avancé sur le problème; quelqu'un a-t-il la solution?
    Merci.

  3. #3
    Membre expérimenté
    Profil pro
    Dev NodeJS
    Inscrit en
    Août 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev NodeJS

    Informations forums :
    Inscription : Août 2006
    Messages : 177
    Par défaut
    Tu dois passer le stream directement au lieu de la requete et de redemander un flux.

    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
     
            public taFonction1(HttpServletResponse response){
     
    		try
    		{
    		ServletOutputStream myOutStream = response.getOutputStream();
                    [...]
    		catch (Exception e)
    		{
    			closeWindow(myOutStream);
    		}
            }
     
            private void closeWindow(ServletOutputStream myOutStream)
    	{
    		try
    		{
              	myOutStream.println("<script language=\"javascript\">");
    		myOutStream.println("window.close();");
                    myOutStream.println("window.alert(\"An error has occured during Excel export\");");
    	        myOutStream.println("</script>");
    		}
    		catch (Exception e)
    		{
    			m_logger.error("Error in closeWindow function.", e);
    		}
    		finally
    		{
    			if (myOutStream != null){
    	    		myOutStream.flush();
    	    		myOutStream.close();
    	    	}
    		}
    	}
    Non?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Euh... non :

    En gardant la fonction closeWindow telle que tu l'as écrite (donc out le getWriter)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try
    {
    ExcelFile file = new ExcelFile (response);
    myOutStream = file.getOutputStream();
    ...
    ...
    }
    catch (Exception e)
    {
    			closeWindow(response);
    }
    avec :
    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
        public ExcelFile(HttpServletResponse response) throws ExcelException{
     
        	//Variables initialization
        	initialize();
     
        	try
        	{
        		response.setContentType("application/vnd.ms-excel");
        		m_output = response.getOutputStream();
        		m_workbook = Workbook.createWorkbook(m_output);
        	}
        	catch (Exception e)
        	{
        		throw new ExcelException("Exception occured in ExcelFile Constructor ",e);
    		}
        }

    Et ben quand je rentre dans closeWindow
    myOutStream.println("<script language=\"javascript\">");
    myOutStream.println("window.close();");
    myOutStream.println("</script>");
    il ne se passe rien (donc le myOutStream issu de response.getOutpuStream doit pas être le même que le response.getWriter que je n'ai pas le droit d'utiliser)

  5. #5
    Membre expérimenté
    Profil pro
    Dev NodeJS
    Inscrit en
    Août 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev NodeJS

    Informations forums :
    Inscription : Août 2006
    Messages : 177
    Par défaut
    En effet, je comprends ton problème. Qu'est-ce qui t'empêche de modifier le content-type http dans la fermeture de la fenêtre?

    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
     
     public ExcelFile(HttpServletResponse response) throws ExcelException{
     
        	//Variables initialization
        	initialize();
     
        	try
        	{
        		response.setContentType("application/vnd.ms-excel");
        		m_output = response.getOutputStream();
        		m_workbook = Workbook.createWorkbook(m_output);
        	}
        	catch (Exception e)
        	{
        		response.setContentType("test/html");
        		m_output.println("<script language=\"javascript\">");
        		m_output.println("window.close();");
        		m_output.println("</script>");
    		}
        }

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Merci!!!!!!!!

    (à ceci près que c'est response.setContentType("text/html")

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/05/2015, 18h02
  2. Réponses: 1
    Dernier message: 13/03/2014, 11h31
  3. Erreur "getOutputStream() has already been called for this response"
    Par Malatok dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 22/02/2013, 19h11
  4. [FPDF] Some data has already been output, mais où ?
    Par baggie dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 11/04/2008, 22h16
  5. [1.x] Too many forwards have been detected for this request
    Par rredouane dans le forum Symfony
    Réponses: 1
    Dernier message: 27/02/2008, 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