[Resolvido] JSF exportação para excel (poi) em branco

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