[DÚVIDA] Resposta por JSON no VRaptor

470 views
Skip to first unread message

Fred Alencar

unread,
Apr 4, 2012, 9:54:48 AM4/4/12
to caelum-...@googlegroups.com
Pessoal, preciso mandar uma resposta para o ExtJS por Json... Para isso, preciso apenas incluir os objetos no result e fazer com que a resposta seja em Json?


@JSON
@Path("/sistemas/")
public void carregaSistema() throws SQLException, SessaoException { 
List<Chamada> chamadas = chamadaDao.listar();
List<Menu> menus = menuDao.getMenus();
result.include("chamadas",chamadas);
result.include("menus", menus);
result.use(Results.json());
}



Não ta funcionando.. ;/

adeildo júnior

unread,
Apr 4, 2012, 9:57:10 AM4/4/12
to caelum-...@googlegroups.com
nao deveria colocar o serialize() na ultima declaracao?

Celso Dantas

unread,
Apr 4, 2012, 9:57:08 AM4/4/12
to caelum-...@googlegroups.com
faça assim:

result.use(Results.json()).withoutRoot().from( chamadas ).recursive().serialize();

2012/4/4 Fred Alencar <fr.ale...@hotmail.com>

--
You received this message because you are subscribed to the Google Groups "caelum-vraptor" group.
To post to this group, send email to caelum-...@googlegroups.com.
To unsubscribe from this group, send email to caelum-vrapto...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/caelum-vraptor?hl=en.

Fred Alencar

unread,
Apr 4, 2012, 10:00:53 AM4/4/12
to caelum-...@googlegroups.com
Pelo que eu entendi, no from() você especifica o objeto que vai ser serializado... No caso, como eu quero serializar vários objetos pra mandar por JSON eu preciso chamar o método recursive().. É isso ?


From: celso...@gmail.com
Date: Wed, 4 Apr 2012 10:57:08 -0300
Subject: Re: [DÚVIDA] Resposta por JSON no VRaptor
To: caelum-...@googlegroups.com

Lucas Cavalcanti

unread,
Apr 4, 2012, 10:02:34 AM4/4/12
to caelum-...@googlegroups.com
mandar vários objetos não é um json válido. Vc precisa envolver esses objetos com algum outro.

Jeito fácil: crie uma classe que tenha um atributo pra cada objeto que vc quer exportar e serialize um objeto dessa classe.

2012/4/4 Fred Alencar <fr.ale...@hotmail.com>

Jose Maria de Oliveira

unread,
Apr 4, 2012, 10:04:46 AM4/4/12
to caelum-...@googlegroups.com

Olá Fred.

 

Segui as dicas do Lucas e vou te passar.

 

Cria uma classe que herda de DefaultExtJson como abaixo:

@Component

public class SuaClasseJSON extends DefaultExtJson {

                public SuaClasseJSON (final HttpServletResponse response, final TypeNameExtractor extractor, final ProxyInitializer initializer) throws IOException {

                               super(response, extractor, initializer);

                              

                               XStream xstream = (XStream) new Mirror().on(this).get().field("xstream");

 

                    xstream.registerConverter(new CollectionConverter(xstream.getMapper()) {

            /* (non-Javadoc)

             * @see com.thoughtworks.xstream.converters.collections.CollectionConverter#canConvert(java.lang.Class)

             */

            @Override

            @SuppressWarnings("rawtypes")

            public boolean canConvert(Class type) {

                return Collection.class.isAssignableFrom(type);

            }

        });

                }

}

 

Depois faça a chamada assim:

result.use(SuaClasseJSON.class)

                .from(suaLista)

                .success(true)

                .serialize();

 

 

E o tratamento você faz no Ext.

 

Abs

 

José Maria de Oliveira

Eccox Technology

Tel.: + 55 11 4133-1969

Fax: + 55 11 4133-1960

jose.o...@eccox.com.br

www.eccox.com.br

Al. Rio Negro, 433, 4º andar, Edifício I

Alphaville, São Paulo, Brasil - CEP: 06454-904

 

"Seus negócios, disponíveis a qualquer momento, em qualquer lugar"

--

Reply all
Reply to author
Forward
0 new messages