Olá pessoal,
Sou novo em JSF e estou precisando exibir arquivos PDF que estão armazenados no BD (byte[]), usando JSF. Porém, ao executar o método abaixo nada acontece. Já verifiquei o retorno da consulta para ver se o byte[] tinha sido trazido do banco e está tudo ok. Será que alguem poderia me dar uma luz ?
Antecipadamente agradeço …
public String exibirDocumento() throws IOException{
DocumentoSimplificado documentoSimplificadoSelecionado = (DocumentoSimplificado) getBean("documento");
byte[] bytes = null;
bytes = documentoFacade.find(documentoSimplificadoSelecionado.getId()).getArquivo();
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
response.addHeader("Content-disposition","attachment;filename=reporte.pdf");
response.setContentLength(bytes.length);
response.getOutputStream().write(bytes);
response.setContentType("application/pdf");
context.responseComplete();
return null;
}
tenta assim:
public String exibirDocumento() throws IOException{
DocumentoSimplificado documentoSimplificadoSelecionado = (DocumentoSimplificado) getBean("documento");
byte[] bytes = null;
bytes = documentoFacade.find(documentoSimplificadoSelecionado.getId()).getArquivo();
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition","attachment;filename=reporte.pdf");
response.setContentLength(bytes.length);
response.getOutputStream().write(bytes);
response.getOutputStream().flush();
context.responseComplete(); //se não der certo comenta essa linha e testa de novo
return null;
}
a retorne uma String no seu metodo nao um null, retorne uma String que esteja mapeada para exibir a mesma página.
Olá Marcos,
Antes de mais nada, obrigado por responder. Tentei das 2 maneiras mas infelizmente ainda não funcionou. Tentei também colocar um <redirect/> no meu navigation-case pra forçar o redirecionamento, mas também não tive sucesso.
Você teria mais alguma sugestão ?
<navigation-rule>
<from-view-id>/jsp/index/Index.jsp</from-view-id>
<navigation-case>
<from-outcome>reexibir</from-outcome>
<to-view-id>/jsp/index/Index.jsp</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>