Como passar uma lista HashMap para Ireport?

Boa tarde pessoal!

Estou mais uma vez precisando da ajuda de vocês para resolver um “pequeno” detalhe!
Seguinte, criei uma lista de HashMaps para passar algumas listas para o relatório do ireport. Primeiro para efeito de teste, coloquei apenas um HashMap na minha lista de HashMaps, mas quando gero o relatório aparece o campo correspondente na quantidade de vezes que deveria (de acordo com a quantidade de itens na meu HashMap), porém todos com valor null. :frowning:
Não sei se estou sendo claro, mas vou postar o código, estou fazendo dessa maneira:

List<HashMap<String, Object>> lista = new ArrayList<HashMap<String, Object>>();
        HashMap<String, Object> param = new HashMap<String, Object>();
        for (int i = 0; i < listaNomeCargo.size(); i++) {
            param.put("nomeCargo", listaNomeCargo.get(i));
            lista.add(param);
   //       System.out.println("b: "+lista.get(i));  o println mostra que a lista está corretamente preenchida
        }
// Enviando as informações para gerar o relatório

        HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();

        HashMap<String, Object> parametros = new HashMap<String, Object>();
        parametros.put("custoUnitario", custoUnitario);
        parametros.put("qtdHorasComum", qtdHorasComum);
        parametros.put("totalComum", totalComum);
        parametros.put("qtdHorasExtra", qtdHorasExtra);
        parametros.put("totalExtra", totalExtra);
        parametros.put("listaNomeCargo", listaNomeCargo);
        
        imprimirListaDados("resumoCertificacao", parametros, response, lista);
public void imprimirDados(String relatorio, HashMap<String, Object> parametros, HttpServletResponse response, List<HashMap<String, Object>> lista) {
        try {
            JRDataSource jrds = new JRBeanCollectionDataSource(lista);
            byte[] arquivo = new byte[0];
            String caminho = getDiretorioReal(relatorio + ".jasper");
            JasperReport jasper = (JasperReport) JRLoader.loadObject(caminho);

            JasperPrint print = JasperFillManager.fillReport(jasper, parametros, jrds);
            arquivo = JasperExportManager.exportReportToPdf(print);

            response.setContentType("application/pdf");
            response.setContentLength(arquivo.length);

            OutputStream saida = response.getOutputStream();

            saida.write(arquivo, 0, arquivo.length);
            saida.flush();
            saida.close();


        } catch (Exception ex) {
            System.err.println("O arquivo não foi gerado corretamente!");
            ex.printStackTrace();
        }
    }

Se alguém souber como ajudar, por favor, responda!! rs
Já pesquisei e não consegui resolver isso…

Obrigado!

Eu utilizo praticamente igual a voce, com a diferenca que utilizo no list um javabean nao HashMap, e o bean tem q ter os metodos getters com o mesmo nome dos fields no iReport.
Ex.: no ireport tenho um field chamado “nome”, no bean devo ter getNome().

List&lt;MyBean&gt; lista = new ArrayList&lt;MyBean&gt;();

MyBean bean = new MyBean();
bean.setNome("nome");

lista.add(bean);

Obrigado por responder vdb!

Mas fiquei com algumas dúvidas…
No caso, utilizando seu exemplo, eu iria precisar passar uma lista de nomes (além de outros), então eu teria que instanciar vários “beans” ou como seria?
Outro detalhe…, eu estava utilizando um campo $P{nomeCargo} para receber a lista no iReport, está correto?
Preciso configurar algo a mais no ireport?

Desculpe as perguntas…, mas estou começando no desenvolvimento e esse é meu segundo relatório.

Obrigado mais uma vez!

  1. O List seria todos os dados que vc queira imprimir no detail, preenchendo os campos “$F{nomeCampo}”
  2. O Map vc utiliza para os parametros. “$P{nomeParametro}”
Map&lt;String,Object&gt; par = new HashMap&lt;String,Object&gt;();
par.put("nomeParametro", objeto);

Metodo que utilizo, este metodo gera o relatorio e me retorna um byte[] de um pdf, mas vc pode alterar a ultima linha e gerar um preview por exemplo.

public byte[] report(InputStream relatorio, Collection list, Map&lt;String,Object&gt; parameters) throws JRException {  
       
     /* Cria o design apartir do reportStream */  
     JasperReport jasperReport = (JasperReport) JRLoader.loadObject(relatorio);  
       
     /* Cria um JRBeanCollection a partir de um list fornecido */  
     JRBeanCollectionDataSource lista = new JRBeanCollectionDataSource(list);  
       
     /* Prepara o relatorio para impressao */  
     JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, lista);  
       
     return JasperExportManager.exportReportToPdf(jasperPrint);  
}

Como pegar o InputStream do arquivo.jasper

getClass().getResourceAsStream("/resource/ireport/Agenda.jasper");

Bom dia ,

poderia me ajudar mas não sei onde estou errando estou tentando no iReport
ler uma classe do java mas não consigo dá mensagem abaixo :

o que estou fazendo de errado
abs


   1. no iReport 3.0.0 fui :  
   2. - aba Opções   
   3.   - Classpath   
   4.     - adicionar JAR  
   5.       selecionei o jar  
   6.       - salvar classpath  
   7.   
   8. - Arquivo  
   9.    - Novo Documento  
  10.    - Nome relatório : teste  
  11.     ok  
  12.   
  13. - Menu item  Data  
  14.   - Query Relatorio  
  15.   - aba Fonte de Dados JavaBEan  
  16.   - nome da classe : br.com.xxxxxx..data.model.user.UserImpl  
  17.   - clico botão Ler Atributos :    
  18.   
  19.    Erro de Classe não Encontrada ! VErifique o ClassPath e tente novamente. br.com.xxxxxx..data.model.user.UserImpl  

@Entity
@Table(name="USER")
public class UserImpl {
	@Id
	@GeneratedValue
	@Column(name = "USER_ID")
	/** Identificador único */
	private Long id;
	@Column(nullable = false)
	/** Nome do usuário */
	private String name;
	@Column(nullable = false)
	/** E-mail do usuário */
	private String email;
	@ManyToOne(cascade =javax.persistence.CascadeType.ALL)
	@JoinColumn (name = "ROLE_ID")
  	@OneToMany(mappedBy = "user",cascade =javax.persistence.CascadeType.ALL,fetch = FetchType.LAZY)
	private List&lt;Document&gt; documents = new ArrayList&lt;Document&gt;();
	
  get...set...
	

Ola…

Nem precisa adicionar a classe, va em Visualizar -> Campos do Relatorio. Nao vai ter nada dai é so vc adicionar o nome do campo igual ao nome da propriedade do seu bean.
No seu caso vc teria um campo id, name, email. Dai so arrastar para usar.

encontrei o meu erro …

a classe não tinha construtor com isso …não retorna nehum campo…

abs