Recursividade e TreeNode

1 resposta
smorigo

Boa tarde pessoal estou tentando montar um <t:tree2> do MyFaces apartir de uma tabela que possui a seguinte estrutura:

CODIGO_FUNCIONALIDADE, CODIGO_PAI, DESCRICAO

Estou tentando montar um metodo recursivo aqui mas não estou tendo sucesso, alguém pode me dar uma sugestão de como devo fazer… :slight_smile:

public static void main(String[] args) {
		TreeNode treeData = new TreeNodeBase("foo-folder", "Arvore", false);
		TreeNodeBase personNode = new TreeNodeBase("person", "Modulo", false);
		
		MontaArvore(personNode, Long.valueOf("0"));
	}
	
	public static void MontaArvore(TreeNodeBase node, Long pai) {
		Session session = HibernateUtility.getSession();
		Criteria criteria = session.createCriteria(Funcionalidade.class);
		
		if (pai.equals(Long.valueOf("0"))) {
			criteria.add(Expression.eq("codigoPai",  Long.valueOf("0")));
		} else {
			criteria.add(Expression.eq("codigoPai",  pai));
		}
		
		Iterator it = criteria.list().iterator();
		
		while (it.hasNext()){
			MontaArvore(null, ((Funcionalidade)it.next()).getCodigoPai());
		}
	}

1 Resposta

L

pelo jeito vc esta supondo que 0 eh o Pai de todos, o que eh meio perigoso …
se for assim msm, seu metodo recursivo deve retornar os filhos de 0 primeiro e construir uma lista de TreeNodes para depois dar um nodoPai.getChildren().addAll();
mas antes disso vc deve adicionar recursivamente com cada node filho do 0 os filhos dele. e assim por diante com os filhos dos filhos dos filhosss… etc

msm assim o bicho pode pegar na hora de diferenciar um nodo folha de um nao folha.

dependendo c o registro eh referencaido como pai em alguma linha desta tabela ou nao

dae vc opta ou pela opcao 1 ou a 2 de construtor do nodo

1)TreeNode nodoFolha= new TreeNodeBase(foo-folder, nome, true);

2)TreeNode nodoNaoFolha= new TreeNodeBase(foo-folder, nome, false);

nao sei c o componente obriga vc a diferenciar os 2, mas acho que ele precisa disso pra renderizar a arvore direito.

Criado 8 de maio de 2006
Ultima resposta 8 de mai. de 2006
Respostas 1
Participantes 2