Passar duas listas para o ireport

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!