VRaptor + json + obj.OneToMany

5 respostas
M

falaei pessoal, estou precisando de uma ajuda nessa combinação do assunto.

Estou tentando trazer uma lista de telefone de PessoaFisica para exibir. Eu consigo trazer os atributos de PessoaFisica de forma tranquila, mas a lista de telefone não estou conseguindo.

tenho a seguinte situação:

public class Pessoa {

            @OneToMany
            private List<Telefone> telefones;
            
       //     getters and setters
           
    }

    public class PessoaFisica extends Pessoa {
           
          private String nome;
          private String cpf;

    }

    public class FuncionarioFisico extends Funcionario {

            @ManyToOne
            private PessoaFisica pessoaFisica;
            
       //     getters and setters
           
    }

  public class Telefone {

            @ManyToOne
            private Pessoa pessoa;

            private String descricao;
            
       //     getters and setters
           
    }

tenho minha busca json da seguinte forma:

@Override
	@Get("/login/buscarJson.json")
	public void buscarJson(String q) {
		// TODO Auto-generated method stub
		
		log.info("BUSCA JSON: " + q);
		List<FuncionarioFisico> funcionarioFisicos = null;
		if (q.length() > 13) {
			funcionarioFisicos = funcionarioFisicoBusinessFacade.consulta(q, "cpf");
		}
		if (!Valida.isEmpty(funcionarioFisicos)) {
			result.use(json()).withoutRoot().from(funcionarioFisicos).include("pessoaFisica")
			                                                         .include("cargo")
			                                                         .include("pessoaFisica.telefone") // acho que pode ser neste trecho
			                                                         .serialize();	
		}
	}

na hora de formatar pra exibir:

$("#nome").html(funcionario.pessoaFisica.nome);                                         
 $("#cargo").html(funcionario.cargo.descricao);
 $("#telefone").html(funcionario.pessoaFisica.telefone[0].descricao); // tento desta forma, mas o objeto não existe

se alguém puder dar uma moral ficarei agradecido! abraços.

5 Respostas

Lucas_Cavalcanti

o .recursive() não funciona pra vc?

M

estou utilizando vraptor 3.4.1

tentei dessas formas e em ambas me estorou erro:

result.use(json()).withoutRoot().from(funcionarioFisicos).include("pessoaFisica")
                                                                     .include("pessoaFisica.telefone").recursive()
			                                                         .include("cargo")
			                                                         .serialize();

result.use(json()).withoutRoot().from(funcionarioFisicos).include("pessoaFisica").recursive()
                                                                     .include("pessoaFisica.telefone")
			                                                         .include("cargo")
			                                                         .serialize();

erro

br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: com.thoughtworks.xstream.core.TreeMarshaller$CircularReferenceException:
fredericomaia10

Tente usar o recursive, mas retire os includes que colocou. O recursive faz os includes ‘automaticamente’.

Lucas_Cavalcanti

use o recursive e dê um exclude na propriedade que tá dando referencia circular (deve ter no meio da stacktrace)

M

pow pessoal, desculpe-me pela demora, mas só estou tendo tempo agora.

obrigado pela ajuda! fiz da seguinte forma:

result.use(json()).withoutRoot().from(funcionarioFisicos)
                                             .include("pessoaFisica")
			                     .include("pessoaFisica.telefone")
			                     .exclude("pessoaFisica.telefone.pessoa")
                                             .include("cargo")
			                     .serialize();

só falta agora descobrir como pôr o tópico como resolvido rrssss…

Criado 6 de janeiro de 2013
Ultima resposta 12 de jan. de 2013
Respostas 5
Participantes 3