Fórum IReport + JSF + PrimeFaces - Problema ao exibir o report gerado usando Primefaces media #475395
07/04/2014
0
Já perdi bastante tempo batendo a cabeça com isso e resolvi pedir a ajuda de vocês.
Página XHTML:
<p:dataTable id="amostraDataTable" var="amostra"
value="#{searchAmostraBean.amostraList}" paginator="true" rows="10"
paginatorTemplate=" "
rowsPerPageTemplate="5,10,15"
emptyMessage="A pesquisa não retornou resultados"
paginatorPosition="bottom">
<p:column style="width: 184px;height: 50px;">
<f:facet name="header">
<p:commandLink id="create" action="pretty:createAmostra"
title="Novo">
<h:graphicImage value="/images/btn_novo.png" />
</p:commandLink>
</f:facet>
<p:panelGrid columns="3" style="width: 40px;height: 30px;">
<pretty:link mappingId="changeAmostra" title="Editar">
<f:param value="#{amostra.id}" />
<h:graphicImage value="/images/btn_editar.png" />
</pretty:link>
<pretty:link mappingId="removeAmostra" title="Apagar">
<f:param value="#{amostra.id}" />
<h:graphicImage value="/images/btn_apagar.png" />
</pretty:link>
<pretty:link mappingId="visualizeAmostra" title="Ver">
<f:param value="#{amostra.id}" />
<h:graphicImage value="/images/btn_ver.png" />
</pretty:link>
<p:commandButton id="gerarPdf" value="gerar pdf" rendered="true"
oncomplete="PF('reportVar').show();" actionListener="#{searchAmostraBean.putAmostra(amostra)}"
update=":amostraForm:commonReport :amostraForm:pdfView">
</p:commandButton>
</p:panelGrid>
</p:column>
<!-- resto das linhas ignorado -->
<p:dialog id="commonReport" resizable="false" draggable="false"
position="center" width="500" height="300" modal="true"
header="OCPlus - Etiqueta de rastreio" dynamic="true"
widgetVar="reportVar" >
<p:outputPanel id="reportPanel">
<p:media id="pdfView" value="#{searchAmostraBean.etiqueta}" width="100%"
height="300px" player="pdf" >
</p:media>
</p:outputPanel>
</p:dialog>
Managed Bean
public void putAmostra(Amostra amostra){
this.amostra = amostra;
}
public StreamedContent getEtiqueta(){
File etiqueta = null;
InputStream is;
try {
ArrayList<Amostra> listAmostra = new ArrayList<Amostra>();
listAmostra.add(amostra);
JRBeanCollectionDataSource jrBeanCollectionDataSource = new JRBeanCollectionDataSource(listAmostra);
JasperPrint jasperPrint = JasperFillManager.fillReport(reportPath, new HashMap<String,Object>(),jrBeanCollectionDataSource);
JRExporter exporter = new JRPdfExporter();
etiqueta =new File("OCPlusTicket_"+amostra.getNumero().toString());
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE, etiqueta);
exporter.exportReport();
is = new FileInputStream(etiqueta);
etiqueta.deleteOnExit();
DefaultStreamedContent sc = new DefaultStreamedContent(is,"application/pdf","OCPlusTicket_"+amostra.getNumero().toString());
return sc;
} catch (JRException | FileNotFoundException e ) {
e.printStackTrace();
return null;
}
}
Desde já agradeço.
Matheus Silva
Curtir tópico
+ 0Posts
07/04/2014
Carlos Proença
a ideia que eu te dou é separar a geração do carregamento....
tenta criar o arquivo pdf com o ireport... depois carrega ele por outro meio e mostra na tela...
acho que assim é mais facil de voce identificar qual arquivo voce esta mandando... e verifica se ele existe antes de mandar pra tela...
depois quando tiver tempo posso dar uma analisada melhor no seu codigo para ver onde esta o erro...
mas tenta isso ai e fala se conseguiu blz??
att
Gostei + 0
07/04/2014
Matheus Silva
Seguinte, antes eu fazia isso. Tinha um método só pra gerar o StreamedContent e na hora de mostrar no componente eu já passava essa variável. Acontece que desse jeito nem funciona da NullException e mostra apenas uma tela cinza.
Já to sem esperanças já.....
Gostei + 0
07/04/2014
Carlos Proença
calma pequeno gafanhoto.... tipo o problema entao é no carregamento do arquivo sacou??
da uma olhada nesse link GUJ
eu estou no trabalho.. entao estou meio sem disponibilidade pra dar uma olhada no code... mas.... tenta verificar esta parte que voce vai conseguir...
qualquer coisa me manda email que consigo te ajudar mais tarde!!!
att
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)