Boa tarde senhores.
peço a ajuda e experiencia de voce a me ajudar nesse problema, nao queria postar esse topico… pois eu ja realizei esse processo varias vezes… mas como estou desde cedo tentando… nao sei mas onde o problema pode estar,
bem, estou tentar executar um relatorio feito no ireport usando JSF.
mas infelizmente nao esta resultando em nada ! em um outro projeto funciona de boa… mas nesse novo nao!
<h:form id="formRels">
<h:commandLink styleClass="botmsg" value="Imprimir" action="generate_report" target="_blank" actionListener="#{ReportLauncherBean.printRelInsumos}" />
<h:commandLink styleClass="botmsg" value="Imprimir2" action="generate_report" target="_blank" actionListener="#{ReportLauncherBean.printRelInsumos2}" />
</h:form>
no navigation rule no faces config:
<from-view-id>/main.jsp</from-view-id>
<navigation-case>
<from-action>generate_report</from-action>
<from-outcome>generate_report</from-outcome>
<to-view-id>/main.jsp</to-view-id>
</navigation-case>
no bean com escopo request:
esse primeiro metodo, nao faz nada simplesmente abre em uma outra aba a mesma pagina (esse metodo funciona no meu outro projeto)
public void printRelInsumos(ActionEvent env){
fill();
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(lista);
HttpServletResponse response = getResponse();
Map<String, String> parameters = new HashMap<String, String>();
String arquivo = getServletContext().getRealPath("/WEB-INF/classes/Reports/relatorio.jasper");
File reportFile = new File(arquivo);
byte[] bytes = null;
try{
bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, ds);
}catch(JRException e){
e.printStackTrace();
}
if (bytes != null && bytes.length > 0) {
ServletOutputStream ouputStream = null;
try {
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
esse metodo, apresenta logo apos ao clicar no botao, mostra o salvar como, pra mim salvar o relatorio ao invez de abrir… porem o relatorio salvo nao abre… da erro!
public void printRelInsumos2(ActionEvent env) throws IOException{
fill();
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(lista);
HttpServletResponse response = getResponse();
Map<String, String> parameters = new HashMap<String, String>();
String arquivo = getServletContext().getRealPath("/WEB-INF/classes/Reports/relatorio.jasper");
InputStream reportStream = getFacesContext().getExternalContext().getResourceAsStream(arquivo);
response.setContentType("application/pdf");
response.setHeader("Content-disposition", "attachment;filename=listaInsumos.pdf");
ServletOutputStream ouputStream = response.getOutputStream();
try {
JasperRunManager.runReportToPdfStream(reportStream, ouputStream, parameters, ds);
} catch (JRException ex) {
Logger.getLogger(ReportLauncherBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
se alguem puder me ajudar a solucionar esse problema ?
realmente nao entendo ! em um projeto funciona e nesse meu novo nao!
obrigado a todos, um abraço