Bom dia galera.
Estou fazendo um relatório usando iReport usando o Hibernate e Eclipse como IDE.
Meu problema está em:
1º - Se eu faço a conexão com o Banco no relatório, faço o sql passando um valor inteiro para o minha id, ele gera o relatório normalmente, mas eu precisaria trazer do Java 2 listas e o Id da solicitação como parâmetros este id tem q substituir o valor inteiro que mencionei;
2º - Como eu faço para enviar os objetos prontos do Java e manipulá-los no iReport?
Procurei algo na Internet e achei isso:
public void gerarRelatorio() {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
ServletContext context = (ServletContext) externalContext.getContext();
String arquivo = context.getRealPath("relatorios/relatorio.jasper");
JRDataSource jrds = new JRBeanCollectionDataSource(listarCidades());
gerarRelatorioWeb(jrds, null, arquivo);
}
private void gerarRelatorioWeb(JRDataSource jrds, Map<Object, Object> parametros, String arquivo) {
ServletOutputStream servletOutputStream = null;
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
try {
servletOutputStream = response.getOutputStream();
JasperRunManager.runReportToPdfStream(new FileInputStream(new File(arquivo)), response.getOutputStream(), parametros, jrds);
response.setContentType("application/pdf");
servletOutputStream.flush();
servletOutputStream.close();
context.renderResponse();
context.responseComplete();
} catch (Exception e) {
e.printStackTrace();
}
}
private List<Cidade> listarCidades() {
int id = (Integer)JsfHelper.getSessionAttribute( "idSolGer" );
TsSolGer solGer = (TsSolGer) new BaseDao().getObject( new TsSolGer(), id );
this.listaCidades = new TsRotaPadDao().getListaCidades( solGer.getIdViagem().getRota().getIdRotaPad() );
Cidade cidade = new Cidade();
TsSolGer solicitacao = new TsVeiculoDao().carregarSolicitacao(id);
for (int i = 0; i < listaCidades.size(); i++) {
cidade = listaCidades.get(i);
if (cidade.getNome().equals(solicitacao.getVeiculo().getCidade().getNome())
&& cidade.getNome().equals(solicitacao.getVeiculo().getCidadeAux().getNome())){
listaCidades.remove(i);
}
}
return listaCidades;
}
private List<TsEntrega> listarEntregas() {
int id = (Integer)JsfHelper.getSessionAttribute( "idSolGer" );
TsSolGer solGer = (TsSolGer) new BaseDao().getObject( new TsSolGer(), id );
this.entregas = new TsEntregaDao().getRotById( solGer.getIdViagem().getIdViagem() );
return entregas;
}
Vejam que existem 2 métodos abaixo que geram listas, estas 2 listas são as q eu preciso enviar para o Relatório.
No JSP eu estou chamando assim:
<h:commandButton action="#{detalhes.gerarRelatorio}" value="Relatório" onclick="this.form.target='_blank'" />
Estou com o relatório parado, alguém poderia me dar uma ajuda?
Desde já agradeço.
Cordialmente
Diego Silva