Passar Lista para o sub relatório [RESOLVIDO]

Pessoal boa noite nunca usei a opção do ireport de sub relatórios tenho o seguinte objeto:

@Entity
@Table(name = "vendas")
public class Venda {

	@Id
	@GeneratedValue
	@Column(name = "id_venda", nullable = false, unique = true)
	private Long id;

	@ManyToOne
	@JoinColumn(name = "id_vendedor", nullable = false)
	private Vendedor vendedor;

	@ManyToOne
	@JoinColumn(name = "id_cliente", nullable = false)
	private Cliente cliente;

	@Column(name = "dt_venda", nullable = false)
	private Date dataDaVenda;

	@Column(name = "vl_total", nullable = false)
	private Double valorTotal;

	@OneToMany(fetch = FetchType.EAGER, mappedBy = "venda")
	@Cascade( { org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
	private Set<ItenDaVenda> itensDaVenda;
....

Agora o problema é o seguinte eu consigo exibir normalmente os atributos que não são listas, ou seja, cliente, vendedor, valor… eu consigo exibir.
Mas para cada venda eu preciso exibir os itens da venda, porem eu não sei como mandar o itensDaVenda para o sub relatório.
Se alguém puder me ajudar, desde já agradeço!

bom vc cria um parametro do tipo Collection no seu subReport

e da aplicacao vc cria um VO e passa os valores do VO por parametro
la no seu subreport na aba subrelatorio vc escolhe pra ele usar um dataSource e coloca a seguinte expressao:

new JRBeanCollectionDataSource($P{values})

Na aba subrelatorio vc coloca o caminho do subrelatorio, ou se preferir use uma expressao e passe um stream da aplicacao , via parametros.

Então eu tinha visto isso de passar parâmetro mas não entendi uma coisa, eu passo a venda assim.


			List<Venda> lista = new VendaDAO().filtroGenerico(null);

			HashMap parametros = new HashMap();

			parametros.put("dataGeracao", new Date());

			InputStream inputStream = GeraPDF.class
					.getResourceAsStream("/repositorio/venda/report/RelatorioDeVendas.jasper");
			JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(lista);
			JasperPrint impressao = null;

			try {
				impressao = JasperFillManager.fillReport(inputStream, parametros, ds);
....

Ai dentro de cada Venda dentro de lista tem os itens da venda.
O que eu não entendi é como eu passo por parâmetro isso! Ou eu passo a lista novamente, porem como parâmetro ai depois coloco $P{itensDaVenda}?

Bom…na verdade eu faço um pouco diferente:

Supondo o seu modelo:

public class Venda{

  public List&lt;Item&gt; itens
}

Vc deve:
1- criar no Ireport um campo chamado ‘itens’ que seja do tipo List.
2 - criar um subreport;
3 - definir a propriedade ‘DataSource Expression’ do subreport como new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{itens})

Vc tem q fazer o seguinte…

1º No iReport selecione o componente subReport, e altere as seguintes propriedades :

                [list]Connection Type : Use a datasource Expression[/list]
                
                [list]Data Source Expression : new net.sf.jasperreports.engine.JREmptyDataSource($F{itensDaVenda})[/list]

                [list]Parameters : Add um novo parametro. Exemplo:  Name: itensVenda    Expression : $F{itensDaVenda};[/list]

2º Agora no relatorio que vc criou(subreport), declare os field que tem na lista itensVenda.

OBS: $F{itensDaVenda} tem q ser declarado no relatorio principal do tipo java.util.Collection.

Tem como fazer esse relatorio sem utilizar subrelatorio, teria q usar groups, eu particulamente acho mais fácil.

Flww

Vish!! em cima do que eu precisava!!!
Criei um get para retornar no tipo List:

	public List<ItenDaVenda> getItensDaVendaList() {
		List<ItenDaVenda> lista = new ArrayList<ItenDaVenda>();
		for (ItenDaVenda i : this.itensDaVenda) {
			lista.add(i);
		}
		return lista;
	}

ai coloquei no Ireport como raf4ever disse:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{itensDaVendaList})

E já era!!! Funcionando!! Mais uma vez pessoal Muito Obrigado!!