Java não chama SubReport

5 respostas
Diego_Adriano

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 ..

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();
	}
}

5 Respostas

E

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);
}
Diego_Adriano

Vou tentar dessa forma e posto aqui de novo …
vlw

E

Bom dia.
conforme exemplo, o sub-relatório passa por parâmetro.
Assim esta funcionando.

Diego_Adriano
Bão, fiz como sugeriu e o erro persistiu, porém por curiosidade mandei imprimir o diretório:
C:\Users\Diego\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\DuxSolutions\Relatorios_Jasper\Professor_Turma_turmas.jasper

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:

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"));//
E

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?

Criado 11 de setembro de 2013
Ultima resposta 12 de set. de 2013
Respostas 5
Participantes 2