Arvorização

1 resposta
Chuvinha

Galera, estou desenvolvendo uma aplicação onde tenho que montar uma árvore, jogar no JSON e mandar pra minha JSP.
A parte de configuração do JSON está pronta (só preciso jogar lá em ordem “Pai e seus filhos”)e da jsp tbm.
Estou com dificuldade em varrer minha lista.
Tipo, minha árvore está mais ou menos assim:
nível 1: tem 14 atributosPai
nível 2: tem os filhos desses atributosPai
nível 3: tem os filhos do nível 2

Meu código está assim:

public class AtributoAction extends ActionSupport {

private List<Atributo> atributosList;
private Atributo atributoPai;
private Atributo atributoFilho;

private AtributoDAO atributoDAO;

public String execute() {

   atributosList = new ArrayList<Atributo>();
   atributoDAO = new AtributoDAO();
   //tras todos atributos 
   atributoList = atributoDAO.getAtributos();

   for(Atributo atributo: atributosList){
      //se o idPai == null, ou seja,  não possui pai 
      if(atributo.getIdPai() == null){//vai trazer os 14 atributos nível 1
         atributoPai = new Atributo();
         atributoPai = atributo;
        //esse metodo onde estou com dificuldade pra organizar a arvore
        possuiFilhos(atributoPai.getIdAtributo();
      }
   }

   return SUCCESS;
}

public void possuiFilhos(int idPai){
   for(Atributo atributoFilho : atributosList){
      if(atributoFilho.getIdPai == idPai){
         json = serializer.deep(atributoPai);
         //sei que tenho que fazer uma chamada recursiva 
         possuiFilhos(atributoFilho.getId());
      }
   }
}

Alguém poderia me ajudar?

1 Resposta

davidbuzatto

Oi Chuvinha,

Segue o pseudocódigo, adapte ao seu problema.

public String criarJSON( Nó raiz ) {

    // cria um StringBuilder para armazenar o JSON
    StringBuilder sb = new StringBuilder();

    // gera o JSON do objeto e adiciona no StringBuilder
    sb.append( JSON do objeto raiz aqui );
 
    // a raiz tem filhos?
    if ( raiz.temFilhos? ) {
 
        // itera por cada filho
        for ( Nó f : raiz.getFilhos() ) {

            // faz a chamada recursiva, passando o filho.
            // o JSON do objeto vai ser criado e caso ele tenha
            // filhos, entra novamente no método
            sb.append( criarJSON( f ) );

        }

    }

    // retorna o conteúdo do JSON gerado
    return sb.toString();

}
[]´s
Criado 25 de setembro de 2010
Ultima resposta 25 de set. de 2010
Respostas 1
Participantes 2