Olha...
Na hora de gerar o zip da o seguinte erro:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
Para gerar o zip, eu estou fazendo mais ou menos o mesmo que está nesse artigo:
http://www.guj.com.br/articles/181
No jsp, quando deu esse problema, eu usei o out.clear(); e resolveu.
código do jsp:
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition",
"attachment; filename=chamadas.zip");
Zipper zip = new Zipper();
out.clear();
zip.criarZip(response.getOutputStream(), arquivos);
response.getOutputStream().flush();
Para essa funcionalidade de gerar um zip para todas as linhas selecionadas, estou tentando fazer o mesmo, mas sem usar jsp.
Segue o código do método que está no ManagedBean:
public void geraZipSelecionadas(){
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletResponse resp=(HttpServletResponse)fc.getExternalContext().getResponse();
List<Chamada> chamadasSelecionadas = montaListaSelecionadas();
resp.setContentType("application/octet-stream");
resp.setHeader("Content-Disposition",
"attachment; filename=ligacoesSelecionadas.zip");
Zipper zip = new Zipper();
try {
zip.criarZip(resp.getOutputStream(), buscaArquivosSelecionados(chamadasSelecionadas));
resp.getOutputStream().flush();
} catch (IOException e) {
e.printStackTrace();
}
}
Como deu o mesmo erro, eu estava pensando em colocar um out.clear(); antes do resp.getOutputStream().flush(); pra ver se resolvia.