Fala galera, sou novato em java e estou tentando gerar um relatorio com iReport.
Aqui no forum achei um post q fez o mesmo gerar sem problemas porem ao gerar o mesmo só é liberado para download e com o nome null.pdf
Gostaria que o relatorio aparecesse no navegador e com um nome qualquer diferente de nulo.
Estou utilizando jsf + primefaces, segue meu codigo abaixo:
meu xhtml
[code] <h:form id=“form”>
<p:panel id="grade" header="Dados Grade">
<p:messages id="msgsGrade" />
<h:panelGrid id="esc" columns="3">
<h:outputLabel for="sala" value="Sala: *" />
<p:selectOneMenu id="sala" value="#{imprimeCartBean.sala}"
required="true" requiredMessage="Campo Sala é obrigatório"
style="width:150px;">
<f:selectItem itemLabel="Selecione uma sala" itemValue="" />
<f:selectItems value="#{imprimeCartBean.lstSala}" />
</p:selectOneMenu>
<p:message for="sala" display="icon" />
</h:panelGrid>
<p:separator />
<div align="right">
<p:commandButton rendered="true" id="exportar1" value="Exportar"
ajax="false">
<p:fileDownload
value="#{imprimeCartBean.sampleReportPDF}" />
</p:commandButton>
</div>
</p:panel>
</h:form>[/code]
meu Bean
[code] public ImprimeCartBean() {
try {
boolean ver = Uteis.VerificaSessao();
if (ver == true) {
Configuracao conf = RetornaSessaoConfiguracao();// retorna a
// sessao
// de
// configuracao
Map<String, String>lstSalaSordem = ControleFactory.getInstance().getSalaControle()
.carregaSalascombo(conf.getConf_ano());
lstSala = Uteis.sortByComparator(lstSalaSordem);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Configuracao RetornaSessaoConfiguracao() {
// Retorna a configuracao da sessão
HttpServletRequest request = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
HttpSession session = request.getSession();
return (Configuracao) session.getAttribute("configuracao");
}
public StreamedContent getSampleReportPDF() {
InputStream relatorio = null;
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
InputStream stream = ((ServletContext) FacesContext
.getCurrentInstance().getExternalContext().getContext())
.getResourceAsStream("/WEB-INF/cart.jasper");
List<Aluno> listaAlunos = new ArrayList<Aluno>();
listaAlunos = ControleFactory.getInstance().getAlunoscontrole()
.listaAlunosPcart(2013, Integer.parseInt(sala));
JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(
listaAlunos);
HashMap<String, Object> params = new HashMap<String, Object>();
JasperPrint print = JasperFillManager.fillReport(stream, params,
datasource);
JRExporter exporter = new net.sf.jasperreports.engine.export.JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
exporter.exportReport();
relatorio = new ByteArrayInputStream(out.toByteArray());
} catch (JRException ex) {
Logger.getLogger(ImprimeCartBean.class.getName()).log(Level.SEVERE,
null, ex);
}
return new DefaultStreamedContent(relatorio);
}
public void imprimeRelatorio() throws IOException, SQLException {
List<Aluno> listaAlunos = new ArrayList<Aluno>();
listaAlunos = ControleFactory.getInstance().getAlunoscontrole()
.listaTodos(2013);
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(
listaAlunos);
@SuppressWarnings("rawtypes")
HashMap parameters = new HashMap();
try {
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.responseComplete();
ServletContext scontext = (ServletContext) facesContext
.getExternalContext().getContext();
@SuppressWarnings("unchecked")
JasperPrint jasperPrint = JasperFillManager.fillReport(
scontext.getRealPath("/WEB-INF/cart.jasper"), parameters,
ds);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
exporter.exportReport();
byte[] bytes = baos.toByteArray();
if (bytes != null && bytes.length > 0) {
HttpServletResponse response = (HttpServletResponse) facesContext
.getExternalContext().getResponse();
response.setContentType("application/pdf");
response.setHeader("Content-disposition",
"inline; filename=\"relatorioPorData.pdf\"");
response.setContentLength(bytes.length);
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(bytes, 0, bytes.length);
outputStream.flush();
outputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}[/code]
Tenho mais uma duvida mais fica para o proximo post … vlwww