Faz mais ou menos assim, crie uma classe, com um nome, por exemplo, ExecuteRel, e nesta classe tem um método, por exemplo:
public void executeReport(ActionEvent action) throws IOException, ParseException {
EntityManager em = getEntityManager();
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.
getExternalContext().getResponse();
InputStream reportStream = context.getExternalContext()
.getResourceAsStream("relatorio/Relatorio_EJBQL_PedidosEfetuados.jasper");
response.setContentType("application/pdf");
response.setHeader("Content-disposition", "attachment;filename=ProdutosCadastrados.pdf");
ServletOutputStream servletOutputStream = response.getOutputStream();
ServletContext scontext = (ServletContext)context.getExternalContext().getContext();
try {
Map parameters = new HashMap();
//caminho real para o sub-relatório
parameters.put("SUBREPORT_DIR", scontext.getRealPath("relatorio/")+"/");
//transmite a data para a exibição
parameters.put("data", new Date(new java.text.SimpleDateFormat("dd/MM/yyyy").
parse("01/05/1998").
getTime()));
JasperRunManager.runReportToPdfStream(reportStream,
servletOutputStream, parameters);
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
em.close();
context.responseComplete();
servletOutputStream.flush();
servletOutputStream.close();
}
No Faces-Config.xml:
<managed-bean>
<managed-bean-name>
executeRel</managed-bean-name>
<managed-bean-class>
br.com.integrator.reports.ExecuteRel</managed-bean-class>
<managed-bean-scope>
session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<display-name>
executeRel</display-name>
<from-view-id>
/executeRel.jsp</from-view-id>
<navigation-case>
<from-action>
generate_report
</from-action>
<to-view-id>
/executeRel.jsp</to-view-id>
</navigation-case>
</navigation-rule
Na página de exemplo, tipo executeRel.jsp, adicione a tag que chamará o relatório:
<f:view><h:form>
<h:commandLink action="generate_report" actionListener="#{executeRel.executeReport}">
<h:outputText value="Visualizar Relatório"></h:outputText>
</h:commandLink>
</h:form></f:view>
Cara, eu adaptei do exemplo do livro que li, já que é o mais simples que possuo pra te passar. Mas acho que deu pra entender, beleza. Qualquer coisa, posta o problema ai.
Abraços