Pessoal,
depois de procurar bastante, fazer vários testes, resolvi ver se alguém já teve esse “probleminha” tbm.
Estou tentando colocar o arquivo (workbook do poi) no response, pra quando clicar na tela em exportar, já abre o arquivo no excel,até ai tudo blz, o problema é que esta “gerando” em branco o .xls, e o mesmo é gerado com todo o conteúdo quando é salvo em disco.
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();
response.setContentType("application/excel");
response.setHeader("Content-Disposition", "attachment;filename=\""+fileName+"\"");
try {
//PrintStream stream = new PrintStream(response.getOutputStream());
//stream.write(b, 0, b.length);
ServletOutputStream out = response.getOutputStream();
workbook.write(out);
//out.write(b);
out.flush();
out.close();
fc.responseComplete();
// grava em disco
FileOutputStream fileOut = new FileOutputStream("C://"+fileName);
workbook.write(fileOut);
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
As linhas comentadas são de testes de várias implementações que encontrei na net, em todas sempre faz a mesma coisa, o arquivo em disco fica perfeito, mas o que vai pra “web” fica em branco.
Alguém tem alguma idéia do que acontece?
valeu!
[color=darkblue]Não sei se isso mas o método espera: [/color]
write(java.io.OutputStream stream)
Method write - write out this workbook to an Outputstream.
[color=darkblue]Acredito que deveria ser algo do tipo : [/color]
OutputStream out = (ServletOutputStream) response.getOutputStream();
[color=darkblue]Espero ter ajudado [/color]
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFWorkbook.html
ServletOutputStream herda OutputStream .
valeu!
[color=darkblue] Nesse tópico aqui foi postado um exemplo completo pelo furutani : [/color]
POI
Valeu amigo!
Na verdade meu problema não esta sendo com o POI, e sim com jogar o conteúdo do workbook ou de um próprio xls gerado, no response do JFS, o arquivo sem fica vazio ou em outros testes de implementação, o IE tenta abrir um arquivo com path de cache dele e não com o path que eu indico.
Se vc pesquisar no google JSF + excel,eu devo ter testado todas as implementações que retornam, e sempre da a mesma coisa, arquivo vazio ou o IE tenta abrir um do cache dele que não existe.
Quando gravo em disco fica perfeito o arquivo, com todos os dados.
[color=darkblue]Espero que não seja mais uma das implementações que você encontrou, mas aqui faço assim: [/color]
String path = request.getRequestURI();
String splits[] = path.split("/");
String nameFile = splits[splits.length - 1];
String nameUser = splits[splits.length - 2];
File arquivo = new File((String) System
.getProperty("diretorio")
+ nameUser + "/" + nameFile);
startCopy(new FileInputStream(arquivo), response.getOutputStream());
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition",
("attachment; filename=" + nameFile));
response.flushBuffer();
void startCopy(InputStream enter, OutputStream outline) throws IOException {
byte[] buf = new byte[1024];
int length;
while ((length = enter.read(buf)) > 0) {
outline.write(buf, 0, length);
}
enter.close();
outline.close();
}
[color=darkblue]Conheço pouco JSF, espero ter ajudado :)[/color]
O código estava numa action, foi passado para uma servlet e funcionou.
:?
não me perguntem tecnicamente o por quê, pois não descobri ainda. rs