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





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?
consegui aqui. adicionei no web.xml
br.com.caelum.vraptor.packages
br.com.caelum.vraptor.util.extjs
Ficou otimo !
Olá Daniel, você essa implementação funciona com a versão 4 do ExtJS?
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
Daniel, ótima iniciativa!
parabéns…
Só não esta sendo possÃvel efetuar o download do Projeto Completo.
Poderia verificar ?
Obrigado.
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
Gostaria de saber como rodar esse projeto no netbeans ? quais as bibliotecas nescessararias ?
Acredito que sim, pois pelo que eu vi, o padrão do JSON utilizado pela versão 4 não mudou muito.
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.
Não consigo abrir o link. Não é problema no browser, visto que tentei em vários… Abraços!!
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’
}
}
});
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!”…
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
Muito Grato AMIGO
Olá,
acho que os links estão quebrados.
at+
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/
Oi Daniel! Parece que você atualizou o plugin DownloadManager, pois não consigo abrir os links!
Olá Daniel,
Parabéns pelo POST. Ótimo trabalho. Agora, não consigo fazer download dos arquivos, pois os links estão quebrados.
Opa, ajustei os links. Estavam quebrados mesmo.
[]‘s
Daniel
Ajustei as permissões da pasta. Pode tentar novamente.
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
Depois de alguns problemas consegui consertar o Blog e os links para download.