java - Descarga JSF CSV en frijol
download (1)
3 cosas saltan aquí
Si no se
responseComplete()
aresponseComplete()
enFacesContext
prácticamente significa que JSF continuará procesando la solicitud y no afectará el resultado.La llamada de
reset()
es innecesaria.El outputtream debe ser del tipo
ServletOutputStream
Pruebe el siguiente fragmento en su lugar
try { //submitForm(); FacesContext fc = FacesContext.getCurrentInstance(); HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse(); response.setContentType("text/csv"); fc.responseComplete(); //response.setContentLength(contentLength); response.setHeader ( "Content-disposition", "attachment; filename=/"Reporting-" + new Date().getTime() + ".csv/"" ); ServletOutputStream output = response.getOutputStream(); String s = "/"Project #/",/"Project Name/",/"Product Feature(s)/","; s+="/"Project Status/","; s+="/"Install Type/","; s+="/"Beta Test/",/"Beta Test New/Updated/","; s+="/"Production/",/"Production New/Updated/","; s+="/n"; InputStream is = new ByteArrayInputStream( s.getBytes("UTF-8") ); int nextChar; while ((nextChar = is.read()) != -1) { output.write(nextChar); } output.flush(); output.close(); } catch ( IOException e ) { // TODO Auto-generated catch block e.printStackTrace(); }
Además, puede llamar a sos.println(s)
sin la necesidad de todo el trabajo que está haciendo allí
Estoy intentando hacer una descarga de csv de la misma manera que aquí: ¿Cómo proporcionar una descarga de archivos desde un bean de respaldo de JSF?
Mi respuesta sigue arrojando una nullPointerException
en la línea output.write()
. El bean es del alcance de la solicitud. ¿Alguna idea sobre el puntero nulo?
try
{
//submitForm();
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();
response.reset();
response.setContentType("text/csv");
//response.setContentLength(contentLength);
response.setHeader ( "Content-disposition", "attachment; filename=/"Reporting-" +
new Date().getTime() + ".csv/"" );
OutputStream output = response.getOutputStream();
String s = "/"Project #/",/"Project Name/",/"Product Feature(s)/",";
s+="/"Project Status/",";
s+="/"Install Type/",";
s+="/"Beta Test/",/"Beta Test New/Updated/",";
s+="/"Production/",/"Production New/Updated/",";
s+="/n";
InputStream is = new ByteArrayInputStream( s.getBytes("UTF-8") );
int nextChar;
while ((nextChar = is.read()) != -1)
{
output.write(nextChar);
}
output.close();
}
catch ( IOException e )
{
// TODO Auto-generated catch block
e.printStackTrace();
}