Subrelatorio do subrelatorio

Galera procurei mas ta osso!!!
Tenho 3 classes Versao, indice e opcao;
Versao que contem list de indices e indices contem lista de opcao
ae fiz um data source para cada uma.

public class DataSourceVersao implements JRDataSource {
	private Versao versao = null;
	boolean irParaProximo = false;
	private Versao valor = null;

	public DataSourceVersao(Versao versao) {
		
		this.versao = versao;
	}

	public Object getFieldValue(JRField campo) throws JRException {
		if ("pesquisa".equals(campo.getName()))
			return valor.getPesquisa().getNome();
		if ("versao".equals(campo.getName()))
			return (valor.getNome());
		if ("indices".equals(campo.getName()))
			return new DataSourceIndice(valor.getIndices());
		return null;
	}

	public boolean next() throws JRException {
		if (versao != null) {
			valor = new Versao();
			valor.setPesquisa(versao.getPesquisa());
			valor.setNome(versao.getNome());
			valor.setIndices(new ArrayList<Indice>());
			valor.getIndices().addAll(versao.getIndices());
			versao = null;
			return true;
		} else
			return false;

	}
}

depois

package net.compels.apl.datasource;

public class DataSourceIndice implements JRDataSource {
	private Indice indice = null;
	Iterator<Indice> itrIndice;
	boolean irParaProximo = false;

	public DataSourceIndice(List<Indice> indices) {
		itrIndice = indices.iterator();

	}

	public Object getFieldValue(JRField campo) throws JRException {
		if ("nome".equals(campo.getName()))
			return indice.getNome();
		if ("opcoes".equals(campo.getName()))
			return new DataSourceOpcao(indice.getOpcoes());
		return null;
	}

	public boolean next() throws JRException {
		indice = itrIndice.hasNext() ? itrIndice.next() : null;
		irParaProximo = (indice != null);
		return irParaProximo;

	}
}

depois

public class DataSourceOpcao implements JRDataSource {
	private Opcao opcao = null;
	Iterator<Opcao> itrOpcao;
	boolean irParaProximo = false;

	public DataSourceOpcao(List<Opcao> opcoes) {
		itrOpcao = opcoes.iterator();

	}

	public Object getFieldValue(JRField campo) throws JRException {
		if ("descricao".equals(campo.getName()))
			return opcao.getDescricao();
		return null;
	}

	public boolean next() throws JRException {
		opcao = itrOpcao.hasNext() ? itrOpcao.next() : null;
		irParaProximo = (opcao != null);
		return irParaProximo;

	}
}

até os indices foi de boa ele entra no construtor do datasource das opcoes, mas nao entra nem no metodo next e getfieldValue. Alguem ja conseguiu fazer, Segui o tutorial do futurani. mas nao sei o que acontece!!!

tentei mudar o a propriedade usar datasource para new jrbeancollectiondatasource $F{indices}

mas nao deu nada, o codigo nao da erro porem nao mostra as opcoes, os indices estao sendo mostrados normalmente…

vlw pela atencao t+!

consegui galera, o problema era o caminho do 2 subrelatorio, no metodo da classes Datasource indice eu passo o path dele.

public Object getFieldValue(JRField campo) throws JRException { if ("nome".equals(campo.getName())) return indice.getNome(); if ("pathOpcao".equals(campo.getName())) { return pathOpcao; } if ("opcoes".equals(campo.getName())) { return new DataSourceOpcao(indice.getOpcoes()); }

Dae cara, estou tentando fazer exatamente o que voce fez,

no layout do relatorio, fizeste só um subrelatorio? e no subrelatorio tinha os fields com os atributos do objeto da tua lista?

Fiz isso porem um datasource nao consegue chamar o outro. ele até constroi porém nao cai nos metodos getField… e next()…

Abraços

eae rogerio, para ele nao entrar no next quer dizer q nao há elementos. olhe bem no contrutor e veja se há elementos. Caso ha´ja elementos poste suas classes do data source aqui t+!

[code] public DataSourceIndice(List indices) {
itrIndice = indices.iterator(); // -> esse iterator tem q possuir elemento.

 }  [/code]

Cara era isso, valeu!

Abraços