Galera, preciso de uma ajuda para chamar um SubRelatório. Consigo chamar o mesmo quando executo pelo iReport, mas não consigo pelo Java, o relatório principal é exibido mas o Sub não …
[code]try {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
InputStream reportStream = context.getExternalContext().
getResourceAsStream("/Relatorios_Jasper/Professor_Turma.jasper");
InputStream subreportStream = context.getExternalContext().
getResourceAsStream("/Relatorios_Jasper/Professor_Turma_turmas.jasper");
Usuario sessao = new Usuario();
HttpSession sessioon = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
sessao = (Usuario) sessioon.getAttribute("usuario");
Conexao conex = new Conexao();
Connection conn = conex.getConnection();
Map parametro = new HashMap();
parametro.put("usuario", sessao.getNome().toUpperCase());
parametro.put("REPORT_CONNECTION", conn);
parametro.put("SUBREPORT_DIR", subreportStream.toString());
try {
ServletOutputStream servletOutputStream = response.getOutputStream();
JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream,parametro,conn);
servletOutputStream.flush();
servletOutputStream.close();
} catch (JRException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally{
context.responseComplete();
}
[/code]
}
Boa noite.
Eu utilizo assim quando uso um subRelatorio.
HashMap hm = new HashMap();
hm.put("pathSubRel",getDiretorioReal("/relatorio/listaalunosubreport0.jasper"));
hm.put("ano", "LISTA DE ALUNOS - " + ano);
JRBeanCollectionDataSource fonteDados = new JRBeanCollectionDataSource(lista);
try {
return JasperFillManager.fillReport(getInputStream("/relatorio/listaaluno.jasper"), hm,fonteDados);
} catch (JRException ex) {
}
Para encontra o diretorio onde esta os arquivos .jasper
private String getDiretorioReal(String diretorio) {
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
return session.getServletContext().getRealPath(diretorio);
}
Vou tentar dessa forma e posto aqui de novo …
vlw
Bom dia.
conforme exemplo, o sub-relatório passa por parâmetro.
Assim esta funcionando.
Bão, fiz como sugeriu e o erro persistiu, porém por curiosidade mandei imprimir o diretório:
Se eu jogar no “Executar” ele abre o Arquivo, ou seja esta encontrando o relatório.
Então, será que pode ser erro no iReport ? Alguma config ?
Ficou assim:
[code]System.out.println(“Diretório: “+ getDiretorioReal(”/Relatorios_Jasper/Professor_Turma_turmas.jasper”));
parametro.put("usuario", sessao.getNome().toUpperCase());
parametro.put("REPORT_CONNECTION", conn);
parametro.put("SUBREPORT_DIR", getDiretorioReal("/Relatorios_Jasper/Professor_Turma_turmas.jasper"));//[/code]
Boa tarde.
No relatório principal, na parte do subrelatorio:
SubReportExpression: $P{pathSubRel}
Como este parâmetro é uma String, segue o valor do caminho do diretório do sub.
E com você esta passado os dados para este sub relatorio?