Java - java.lang.IllegalStateException: getOutputStream()

 
Vista:

java.lang.IllegalStateException: getOutputStream()

Publicado por antonio26 (1 intervención) el 18/02/2008 16:45:31
Buenas a todos,

He creado un JSP, que genera una tabla HTML y un link "exportar a excel". Al pulsar el link se abre el excel en otra ventana con los datos de la tabla HTML.

El funcionamiento es el siguiente: En el jsp obtengo una lista de objetos, los cuales paso al método generarExcel, que mediante POI HSSF devuelve un objeto HSSFWorkbook. El objeto HSSFWorkbook se genera correctamente y a la hora de pintarlo es cuando da el error.

Aunque los datos me los muestra en otra ventana, no puedo guardarlos y luego tratarlos. Siempre me da el mismo error(java.lang.IllegalStateException: getOutputStream() ya ha sido llamado para esta respuesta), y me sale el aviso del explorer de guardar o cancelar y al dar a guardar lo guarda correctamente, pero luego si lo intentas abrir no lo abre. Da ERROR.

Igualmente, si en el response.setHeader sustituyes inline, por attachment te sale un mensaje del explorer de abrir, guardar o cancelar, y no te deja abrir y al guardar pasa lo mismo que lo dicho anteriormente.

Bueno dejo el código por si alguién tiene alguna idea de lo que me pasa.

Gracias.

<%@page import="java.util.List"%>
<%@page import="es.cronos.mir.infra.catalogo.generarExcel.*"%>
<%@page import="es.cronos.mir.infra.abstracion.dominio.InfraestructuraPublica"%>

<%@page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"%>

<%
try {
List<? extends InfraestructuraPublica> infraes = (List<? extends InfraestructuraPublica>)session.getAttribute("infraestructuras");

//response.reset();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "inline; filename=infraestructuras.xls");

HSSFWorkbook objWB = GenerarExcel.generarExcel(infraes);

byte[] wbBytes = objWB.getBytes();
response.setContentLength(wbBytes.length);
response.setBufferSize(wbBytes.length);
response.getOutputStream().write(wbBytes,0,wbBytes.length);
response.getOutputStream().flush();

System.out.println("Hemos cerrado todo");


} catch (Exception e) {
// No se muestra nada
}

%>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:java.lang.IllegalStateException: getOutputStrea

Publicado por Yomero (1 intervención) el 20/02/2008 19:56:33
Lo primero es que te conviene mejor dejar esta lógica de negocio en un HttpServlet y no en un JSP. Sin embargo puedes intentar algo asi:

<%@page import="java.util.List"%>
<%@page import="es.cronos.mir.infra.catalogo.generarExcel.*"%>
<%@page import="es.cronos.mir.infra.abstracion.dominio.InfraestructuraPublica"%>

<%@page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"%>

<%
try {
List<? extends InfraestructuraPublica> infraes = (List<? extends InfraestructuraPublica>)session.getAttribute("infraestructuras");

HSSFWorkbook objWB = GenerarExcel.generarExcel(infraes);
byte[] wbBytes = objWB.getBytes();

response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=infraestructuras.xls");
response.setContentLength(wbBytes.length);

BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream(), wbBytes.length);

bufferedOutputStream.write(wbBytes, 0, wbBytes.length);
bufferedOutputStream.flush();

System.out.println("Hemos cerrado todo");

if(bufferedOutputStream != null) { try {
bufferedOutputStream.close(); }catch(Exception e) {
//No se muestra nada
}

} catch (Exception e) {
// No se muestra nada
} finally {
if(bufferedOutputStream != null) { try {
bufferedOutputStream.close(); }catch(Exception e) {
//No se muestra nada
}
}
}
%>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar