VRaptor com ExtJS

Realizando alguns testes de integração do framework VRaptor3 com a biblioteca Javascript ExtJS, deparei-me com um problema na serialização de dados no formato JSON. Não que o VRaptor3 não trabalhe bem com esse formato, muito pelo contrário, mas o padrão desses dados não é aceito nativamente pelo ExtJS.

Para solucionar essa questão, criei uma interface que estende a implementação do VRaptor e organiza alguns dados para que a biblioteca javascript os receba de forma mais “natural”. Vale lembrar que, por ser uma extensão do recurso do VRaptor, essa implementação também utiliza a biblioteca XStream utilizada pelo framework.

Para demostrar o uso dessa interface, alterei o projeto do post Introdução ao VRaptor e disponibilizei os arquivos nos links abaixo.

De forma resumida, para utilizar esse recurso bastar importar a interface ExtJSJson.java e ExtJSJsonImpl.java para o seu projeto e utiliza-las da seguinte forma:

Serializar uma lista de objetos para grid:

public void dadosGridJson() {
      List lista = crialista();
      result.use(ExtJSJson.class).from(lista).success(true).serialize();
}

Serializar uma lista de objetos para comboBox:

public void dadosComboJson() {
      List lista = crialista();
      Integer idSelecionado = 2;
      result.use(ExtJSJson.class).from(lista)
			.selected(lista.get(idSelecionado )
					.getId()).serialize();
}

Serializar um objeto para um formulário:

public void dadosComboJson() {
      Objeto objeto = montaObjeto();
      result.use(ExtJSJson.class).from(objeto)
			.success(true).serialize();
}

Apêndice dos métodos:

  • from(Object) – recebe objeto ou coleção que será serializado
  • success(Boolean) – adiciona um parâmetro success ao json e atribui o valor passado
  • success() - adiciona um parâmetro success com valor true
  • selected(Object) – adiciona o parâmetro selected com o valor passado
  • exclude(String[]) – recebe uma lista de atributos que não serão adicionados ao JSON
  • incluce(String[]) - recebe uma lista de atributos que serão adicionados ao JSON

O resultado da formatação realizada por essa interface pode ser visto nas imagens a seguir:

Downloads:


[ATUALIZADO]

Essa interface foi incorporada ao VRaptor 3.2 no pacote:

br.com.caelum.vraptor.util.extjs

Share on Facebook

Responses to VRaptor com ExtJS

  1. geraldo disse:

    Olá, estou usando o vraptor 3 mas quando utilizo br.com.caelum.vraptor.util.extjs.ExtJSJson da o seguinte erro
    org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [br.com.caelum.vraptor.util.extjs.ExtJSJson] is defined: no bean for this type registered
    está é minha classe
    public class NoticiasController {

    private final NoticiaDao dao;
    private final Result result;

    public NoticiasController(NoticiaDao dao,Result result){
    this.dao = dao;
    this.result = result;
    }

    @Path(“noticias/lista.json”)
    public void listaJson(){
    result.use(ExtJSJson.class).from(dao.listaTudo()).serialize();
    }

    public List lista(){
    return dao.listaTudo();
    }
    }

    tem alguma ideia do que está errado?

  2. geraldo disse:

    consegui aqui. adicionei no web.xml

    br.com.caelum.vraptor.packages

    br.com.caelum.vraptor.util.extjs

  3. juniorsatanas disse:

    Ficou otimo !

  4. Rafael Reuber disse:

    Olá Daniel, você essa implementação funciona com a versão 4 do ExtJS?

  5. daniel disse:

    Opa, isso mesmo.
    Mas tu chegou a adicionar as classes que eu coloquei no post? Agora elas estão dentro do JAR do VRaptor, não adicionar nada no classpath.
    []‘s
    Daniel

  6. Dennys disse:

    Daniel, ótima iniciativa!
    parabéns…
    Só não esta sendo possível efetuar o download do Projeto Completo.
    Poderia verificar ?

    Obrigado.

  7. daniel disse:

    Obrigado Dennys.
    Acabei de testar os 3 links e todos funcionaram.
    Ele abre um pop-up para iniciar o download, então talvez seu browser esteja bloqueando.

    Abraço
    Daniel

  8. juniorsatanas disse:

    Gostaria de saber como rodar esse projeto no netbeans ? quais as bibliotecas nescessararias ?

  9. daniel disse:

    Acredito que sim, pois pelo que eu vi, o padrão do JSON utilizado pela versão 4 não mudou muito.

  10. Daniel disse:

    Ah Daniel, esqueci de agradecer pela sua contribuição. Digo que o vRaptor tornou-se a melhor alternativa java para desenvolver utilizar o ExtJS. Obrigado.

  11. Weslley disse:

    Não consigo abrir o link. Não é problema no browser, visto que tentei em vários… Abraços!!

  12. Everton Trindade disse:

    Ola…

    Estou começando a trabalhar com VRaptor e Extjs e quando tentei implementar algo parecido com o que você propôs no post me deparei com o seguinte erro:

    Uncaught TypeError: Cannot read property ‘length’ of undefined

    Você poderia me ajudar a resolver este problema?

    Segue abaixo parte do meu Resource:

    @Path(“/teste/welcome.json”)
    public void welcome() {
    Funcionario u = new Funcionario();
    u.setNome(“everton”);
    u.setNomeGuerra(“trindade”);
    u.setGraduacao(“TC”);
    u.setMatricula(“PC20000″);
    result.use(ExtJSJson.class).from(u).serialize();
    }

    O resultado JSON quando acessada a url /teste/welcome.json

    {“data”: {“codigo”: 1,”nome”: “everton”,”nomeGuerra”: “trindade”,”graduacao”: “TC”,”matricula”: “PC20000″}}

    Trecho de código do extjs:

    Ext.define(‘Usuario’, {
    extend: ‘Ext.data.Model’,
    fields : [
    {name : 'nome'},
    {name : 'matricula'},
    {name : 'nomeGuerra'},
    {name : 'graduacao'}
    ]
    });

    var ds = Ext.create(‘Ext.data.JsonStore’, {
    model: ‘Usuario’,
    proxy: {
    type: ‘ajax’,
    url : ‘/teste/welcome.json’,
    reader: {
    root : ‘data’
    }
    }
    });

  13. Cácio disse:

    Cara, não consigo fazer download. Quando clico no link para baixar o projeto aparece a seguinte mensagem: “/home/dkist/www/blog/wp-content/plugins/download-manager/cache/ must have to be writable!”…

  14. Douglas disse:

    Ola Daniel

    Parabens pela iniciativa, estou começando a avaliar o vraptor e seria muito util os download deste, existe alguma fonte possivel? pois os links continuam sem funcionar.

    Obrigado

  15. Douglas disse:

    Muito Grato AMIGO

  16. Carlos disse:

    Olá,
    acho que os links estão quebrados.

    at+

  17. Marco Tulio disse:

    Mano, parabéns pela iniciativa!! Quem sabe, sabe!!! rsrsr

    Os links estão quebrados tem como disponibilizar novamente? Obrigado!!!

    /home/dkist/www/blog/wp-content/plugins/download-manager/cache/

  18. Lilian disse:

    Oi Daniel! Parece que você atualizou o plugin DownloadManager, pois não consigo abrir os links!

  19. Angelo Brandão disse:

    Olá Daniel,

    Parabéns pelo POST. Ótimo trabalho. Agora, não consigo fazer download dos arquivos, pois os links estão quebrados.

  20. daniel disse:

    Opa, ajustei os links. Estavam quebrados mesmo.
    []‘s
    Daniel

  21. daniel disse:

    Ajustei as permissões da pasta. Pode tentar novamente.

  22. daniel disse:

    Opa, downloads liberados novamente. Acho que descobri o problema. Toda vez que atualizo o plugin DownloadManager ele volta as pastas para o padrão e bloqueia novamente. Bom, vou tentar lembrar disso no próximo update.
    Abraço

  23. daniel disse:

    Depois de alguns problemas consegui consertar o Blog e os links para download.

Post a comment