Galera,
estou querendo passar duas listas de objetos para o Ireport. A primeira lista seria para o relatório principal e a segunda lista seria para o sub-relatório. Acredito que da forma que eu fiz esteja errado.
Segue abaixo:
public void gerarRelatorioPDF() {
[code] try {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
ServletOutputStream servletOutputStream = response.getOutputStream();
String arquivoRelatorio = "br/com/petrobras/farmacoweb/relatorios/RelatorioEstoqueIrregular.jasper";
InputStream in1 = this.getClass().getClassLoader().getResourceAsStream(arquivoRelatorio);
// Primeira lista
JasperRunManager.runReportToPdfStream(in1, servletOutputStream, new HashMap(), new JRBeanCollectionDataSource(this.movimentacaoList));
// Segunda lista
JasperRunManager.runReportToPdfStream(in1, servletOutputStream, new HashMap(), new JRBeanCollectionDataSource(this.estoqueEspecialList));
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment;filename=\""
+ "Relatorio_Inventario.pdf" + "\"");
response.setHeader("Cache-Control", "no-cache");
servletOutputStream.flush();
servletOutputStream.close();
context.responseComplete();
} catch (Exception e) {
LOGGER.warn(e.getMessage());
throw new SystemException(e);
}
}[/code]
Qual seria a forma correta?
Vlw Galera.
Cara, tô meio corrido e não consegui analisar o código com muita paciência pq a pressa tá grande.
Quando eu precisei disso, eu passei um map com dois ArrayLists, mas aí como jrmapcollectiondatasource.
Raramente há uma real necessidade de duas listas.
Não sei qual é a tua necessidade aí, então posso estar falando besteira.
Qualquer coisa, posta aí que eu volto a comentar.
Abraço!
Obrigado cara,
eu criei um Map passando as duas listas conforme código abaixo:
[code]Map listas = new HashMap();
listas.put(“listaMovimentacao”, this.movimentacaoList);
listas.put(“listaEstoqueEspecial”, this.estoqueEspecialList);
JasperRunManager.runReportToPdfStream(in1, servletOutputStream, listas);[/code]
Já no ireport eu criei dois parametros com o nome das chaves que eu passei no Map. Na parte do Detail do formulário eu faço o seguinte:
- $P{listaMovimentacao}.getProdutoFarmaceutico().getDescricaoProdutoFarmaceutico() --> String
- “”+$P{listaMovimentacao}.getProdutoFarmaceutico().getQuantidadeMinima() --> Long
- “”+$P{listaMovimentacao}.getProdutoFarmaceutico().getQuantidadeMaxima() --> Long
Só que o ireport simplesmente não gerá o .jasper e não da nenhum erro.
Estou fazendo certo???
Joga um JasperCompileManager e compila direto no java, só pra confirmar mesmo… e se tiver algum erro, vai sair no console, com certeza.
O iReport é meio retardado, ele pode estar gerando erro e não joga no output… dá uma conferida aí.
Tô acompanhando aqui hehe
Abraço
Leo,
a forma como peguei os parametros no Ireport está correta?
E como faço com o JasperCompileManager?
Não rodei aqui, mas parece estar sim.
Debugga, e vê o que tá no teu “in1”.
Acho eu que pode estar aí o teu problema…
Aguém sabe como pegar uma lista enviada por parämetro por map ao Ireport?
Pelo método “get” do map, passando a chave.
Sim, mas eu preciso pegar essa lista no ireport:
parametros.put("posto", postoAtendimento);
parametros.put("unidade", getUnidadeSelecionada());
parametros.put("listaEstoqueEspecial", getEstoqueEspecialList());
Os dois primeiros parametros eu pego numa boa pois são objetos. Mas no terceiro é uma lista de objetos, não estou sabendo pegar essa lista no ireport.
Tópicos com título em maiúsculos serão deletados!