Como Montar um Grid utilizando Ext JS + Json + Java

No primeiro exemplo de grid utilizando Ext JS, foi utilizado um array simples para popular a tabela. Porém, pode ser que alguma aplicação precise mostrar uma tabela/grid de dados estáticos, mas na
maioria dos casos, precisamos buscar essas informações em um banco de dados.

O post de hoje tem como objetivo mostrar como construir um grid em Ext JS utilizando as informações contidas em um objeto Json, que foi gerado pelo java.

Vamos pegar o código utilizado para contruir o grid com um array simples e fazer algumas modificações para obter os dados do Json:

gridsimples_store

A principal mudança está na modificação do data.Reader, e neste, vamos modificar 3 pontos básicos:

- Precisamos acrescentar a url de configuração, que especifica o local onde está o dado/json.
- Precisamos acrescentar um reader (JsonReader), que é responsável por ler e manipular as informaçõescontidas no Json.

- Precisamos dizer qual é o elemento raiz do json, ou seja, qual é o elemento que possui os dados que irão popular a tabela/grid

O novo data.Store ficará assim:

gridjson01

Ou seja, vamos obter os dados em formato Json de um arquivo chamado contatojson.jsp, cujo elemento principal (root) chama-se rows e tem um total X de elementos (totalProperty – opcional).

Vamos dar uma olhada agora no arquivo contatojson.jsp:

gridjson02Como o foco principal deste post é obter o dado Json, fiz um jsp com scriplet mesmo, apesar de feio, é bem simples (mas não façam isso em casa nem no trabalho! =D)

A classe ContatoJson possui um único método que tem como objetivo gerar o objeto em formato Json:

gridjson05

Note a linha: JSONArray jsonArray = JSONArray.fromObject(contatos);

Utilizei a biblioteca json-lib para fazer o parse. Para maiores informações, consulte: http://json-lib.sourceforge.net/

A classe Contato é apenas um POJO com 4 atributos: nome, email, telefone, aniversário. E a classe GeradorContatos também possui um único método que gera alguns contatos.

Na url, você pode colocar também o nome do arquivo que já possui a informação em formato json:

gridjson03

E o resultado:

gridjson04

Como já dito em posts anteriores, você também pode colocar a url de uma action do Struts ou Spring, e utilizar em seus projetos MVC.

O código completo desse post você pode fazer o download aqui (formato projeto Eclipse)

download

E se ainda não sabe como fazer para importar o projeto no eclipse e executar, pode conferir aqui.

Até a próxima!

:)

Posts Similares

Filed Under: Ext JS 3JSON

Tags: , , , , ,

About the Author

Bacharel em Ciência da Computação, trabalha como Senior Software Engineer/Tech Leader no Citibank (maior instituição financeira do mundo), em São Paulo. Autora do livro ExtJS 4 First Look, publicado mundialmente pela editora Packt Publishing. Possui um blog em inglês (http://loianegroner.com) e também contribui com artigos em inglês para o Java Lobby do portal DZone. JUG leader do CampinasJUG/Java Campinas, coordenadora do ESJUG e uma das fundadoras do JDuchessBR.

Comments (16)

Trackback URL | Comments RSS Feed

  1. Léo Hackin says:

    AHEuhaeuhuaheae … êta minia do JS!

    Bacanasso o artigo! :) Vô retuitá tá ?

  2. CMilfont says:

    Muito massa esse tutorial… já tentou implementar REST com Jersey?

  3. Loiane says:

    Ainda não, mas vou estudar sobre isso.
    Valeu pela dica! :)

  4. João Paulo says:

    Muito bom o post não vejo a hora de começar estudar Ext JS, parabéns!

  5. [...] já postei aqui no blog sobre Ext JS (aqui, aqui e aqui), JSON (aqui e aqui) e Spring (aqui). O objetivo do post de hoje é juntar todas essas [...]

  6. Ricardo says:

    Parabens pelo tutorial utilizando JSON, a didática esta legal, eu estou atrás de artigos na web falando a respeito de json e exemplos de aplicações. Eu só não entendi uma coisa… No seu projeto, dentro de WEB-INF existe um arquivo chamado “contatos.json” e nele contem td a saída que o json espera… a dúvida é: Pra que esse arquivo esta servindo? Como devo utiliza-lo?

  7. Loiane says:

    Olá Ricardo,

    Coloquei esse arquivo apenas como exemplo.

    Num projeto de verdade, devemos utilizar os dados que buscamos no servidor.
    Mas você também pode utilizar um arquivo estático como esse, como por exemplo, se tiver mostrando um grid com os estados do Brasil, pode utilizar o arquivo, afinal, esses dados não sofrerão mudanças.

  8. Rogério says:

    Loiane, muito legal seus posts sobre ExtJS, pore´m estou com uma dúvida, consigo imprimir na tela os dados do Json porém não consigo colocá-los na Grid. Até mais!

  9. Loiane says:

    Como tá seu codigo do store com o grid? Pode enviar ou postar?
    Abraços

  10. alecrama says:

    Please, help me, how to do this application with google app engine, thanks. It cannot read the json file. It needs maybe other libraries?

  11. Franklin says:

    Boa tarde Loiane , parabéns pelo port.

    Estou começando agora com ExtJs, e to usando seu exemplo como estudo, e apareceu uma dúvida. 

    Alterei o arquivo gridjson.js retirando Aniversario , mais quando executo o programa ele mantém a coluna DATA NASC.

    Obrigado

  12. Loiane says:

    Olá Franklin,
    Você precisa retirar o campo tanto da Store/Record quanto do Grid.
    []‘s

  13. Franklin says:

            store: store,        columns: [            {header: "NOME",     width: 170, sortable: true, dataIndex: 'nome'},            {header: "TELEFONE", width: 150, sortable: true, dataIndex: 'telefone'},            {header: "EMAIL",    width: 150, sortable: true, dataIndex: 'email'}        ],

    reader:new Ext.data.JsonReader({ totalProperty:’total’, root:’rows’, fields: [          'nome',          'telefone',          'email'              ] })

    Já alterei ambos e mesmo assim vem DATA NASC.

  14. Loiane says:

    Com o código está tudo ok, a coluna não deveria aparecer mesmo.
    Já tentou limpar o cache, dar refresh no projeto antes de fazer re-deploy?

  15. Franklin says:

    Loiane Boa noite , qual é a versão do Extjs está utilizando nesse exemplo, e ela é compativel com a versão 3.4? Obrigado 

  16. Loiane says:

    Olá Franklin,
    Estou usando a versão 3.x também.
    O grid não sofreu mudanças de uma release para a outra na versão 3.x
    []s

Leave a Reply




If you want a picture to show with your comment, go get a Gravatar.