Bom dia pessoal, tudo bem? Venho encontrando problemas ao tentar executar determinada ação em meu sistema.
Tenho um h:commandLink que sua ação (atributo “action”) consiste em efetuar a liquidação de um título. Surgiu, porém, a necessidade de se gerar um recibo de pagamento nesta mesma ação. Para isso, foi adicionado um campo na tela chamado “Gerar recibo” com as opções “Sim/Não”. Sendo assim, o comportamento esperado é de que ao clicar neste commandLink, seja efetuada a baixa, download do recibo e redirect para a página anterior.
A implementação está funcionando até o ponto do redirect. Consigo processar a liquidação, disponibilizo o recibo, porém não consigo voltar para a tela anterior. Imagino que seja devido à forma como estou disponibilizando o relatório gerado, como segue:
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=" + "Recibo.pdf");
OutputStream out = response.getOutputStream();
ReciboPrinter printer = new ReciboPrinter(tos, out, true);
printer.execute();
Como podem ver, a disponibilização do arquivo PDF manipula a resposta da requisição, encerrando-a neste ponto. A partir daí, qualquer tentativa de redirecionamento apresenta a mensagem:
getOutputStream() has already been called for this response
Alguma ideia de como eu possa resolver este problema?
Obrigado.