Construindo uma aplicação CRUD com o Grails – Parte II

 

Implementando uma busca de Carros com AJAX

 

Edite o arquivo “\exemplo\grails-app\controllers\CarroController.groovy” e adicione as seguintes actions no final do arquivo:

 

    def search = {}

 

    def doSearch = {

      return [ carros: Carro.findAllByNomeLike("%"+params.nome+"%") ]

    }

 

Note que o código acima define a action “search” sem corpo, apenas para redirecionar para o arquivo “/exemplo/grails-app/views/carro/search.gsp”. A página “search.gsp” possui um formulário, o qual faz um POST para a action “doSearch”. Neste momento que o Grails mostra um pouco da produtividade que se pode ter com linguagens mais dinâmicas. Note que o método “Carro.findAllByNomeLike” foi utilizado normalmente, porém não foi necessário implementar o método em lugar nenhum. E ainda a variável “carros” foi automaticamente adicionada na “request” da próxima página, que por convenção, se chama “doSearch.gsp”.

 

Crie o arquivo “/exemplo/grails-app/views/carro/search.gsp” conforme o código abaixo, e teste o exemplo. Note que não será necessário reiniciar o servidor!

 

cod01parte2grails.JPG

cod02parte2grails.JPG

cod03parte2grails.JPG

 

A seguir a página “/exemplo/grails-app/views/carro/doSearch.gsp” que contém a lista com o resultado da busca:

 

cod04parte2grails.JPG

 

Parte testar a busca acesse: http://localhost/exemplo/carro/search. Também é possível editar o arquivo “carro/list.jsp” para incluir a action “search” no menu, conforme abaixo:

 

cod05parte2grails.JPG

 

O resultado pode ser visualizado abaixo:

 

fig01parte2grails.JPG

 

Ao clicar em Search a tela abaixo pode ser visualizada. Observe que a busca utiliza AJAX.

 

fig02parte2grails.JPG

 

O visual da tela também foi alterado para demonstrar um pouco da customizaçao do Grails. A imagem foi alterada no arquivo de layout gerenciado pelo Sitemesh, “exemplo/grails-app/views/layouts/main.gsp”, e o título em vermelho foi alterado no “/exemplo/web-app/css/main.css” na propriedade “h1”.

 

Entendendo o AJAX

A busca de carros implementada anteriormente utiliza AJAX. O Grails pode utilizar as bibliotecas Prototype, Yahoo UI ou Dojo toolkit para esta funcionalidade. Neste exemplo da busca, foi utilizado o Prototype.

 

Note que apenas 2 alterações são necessárias para utilizar AJAX, que são:

 

cod06parte2grails.JPG

 

A taglib “formRemote” recebe a action que deve ser executada e o “id” dos divs onde o resultado será visualizado.

 

Customizando o layout

Os arquivos GSP (Groovy Server Pages) são os mais utilizados pelo Grails para a camada de visualização, devido a facilidade de executar expressões em Groovy na página. Mas páginas em JSP com JSTL/EL também poder ser utilizadas livremente.

 

Existem várias formas de customizar o layout da aplicaçao, uma delas é simplesmente editar o “css” gerado em “/exemplo/web-app/css/main.css”.

 

Mas provavelmente em uma aplicação mais complexa, será necessário ter um controle maior sobre todo o HTML gerado, e criar um “template” de página que possa ser reutilizado em toda a aplicação. Para atingir este objetivo, o Grails utiliza o framework Sitemesh do grupo Opensymphony.

 

cod07parte2grails.JPG

  

Ainda é possível customizar o layout de forma específica para cada classe de Controle. Por exemplo, se criar o template “views/pessoa/pessoa.gsp”, todas as páginas controladas pelo PessoaController serão alteradas.

 

Utilizando a API iText para gerar PDF

Faça o download da API iText aqui: http://prdownloads.sourceforge.net/itext/itext-1.4.2.jar

 

Coloque o arquivo itext-1.4.2.jar no diretório “lib” do projeto.

 

Para tornar o exemplo mais modularizado, vamos implementar a geração do PDF em uma outra classe. Para isto pode ser utilizado uma classe Groovy, Java, ou um “Service”. Lembrando que classes Java podem ser criadas em “exemplo\src\java” e utilizadas normalmente no código.

 

Para este exemplo vamos criar um “Service”, que é uma classe que contém métodos com lógica de negócio. Para isto digite “grails create-service” no prompt, e entre com o nome “PdfService”: 

> grails create-service

create-service:
    [input] Enter service name:
PdfService

Após isto, o arquivo “/exemplo/grails-app/services/PdfService.groovy” será criado. Edite o arquivo conforme abaixo:

 

import java.io.ByteArrayOutputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

 

import com.lowagie.text.Document;

import com.lowagie.text.DocumentException;

import com.lowagie.text.Paragraph;

import com.lowagie.text.pdf.PdfWriter;

 

class PdfService {

     

      boolean transactional = false

 

      def createPDF() {

 

            ByteArrayOutputStream b = null;

 

            Document document = new Document();

            try {

                  b = new ByteArrayOutputStream();

                  PdfWriter.getInstance(document, b);

                  document.open();

                  document.add(new Paragraph("PDF com Grails!"));

            } catch (DocumentException de) {

                  System.err.println(de.getMessage());

            }

 

            document.close();

 

            byte[] pdf = b.toByteArray();

 

            return pdf;

      }

}

 

Note que o código fonte é similar a linguagem Java, e isto é um dos grandes pontos fortes do Groovy.

 

Agora vamos criar o Controle que utiliza o PdfService, para isto abra um prompt e digite:

> grails create-controller

create-controller:
    [input] Enter controller name:
PdfController
 

O arquivo “PdfController.groovy” sera criado na pasta “controller”, altere o código fonte conforme abaixo:

 

class PdfController {

 

      PdfService pdfService;

 

      def index = {    

                  response.contentType = "application/pdf"

                  response.outputStream << pdfService.createPDF()

      }

}

 

Para gerar o PDF reinicie o servidor e abra a aplicação em: http://localhost/exemplo/pdf

 

fig03parte2grails.JPG 

 

Note que não foi necessário criar uma nova instância de PdfService na classe PdfController. Isto é um conceito de IoC (Inversion of Control) para facilitar a programação e manutenção do código. O PdfService é gerenciado internamente pelo framework Spring.

 

Customizando o Hibernate  (opcional)

Conforme mostrado neste artigo, o Grails pode integrar o Hibernate automaticamente para persistir as classes Groovy geradas com o comando “grails create-domain-class”.

 

Porém em projetos reais, pode ser que seja necessário utilizar um banco de dados legado, e para o qual os arquivos de configuração do hibernate (hibernate-cfg.xml e *.hbm.xml) já estejam mapeados. Neste caso, é possível configurar o Grails para utilizar as configurações já existentes do Hibernate, para isto, basta colocar os arquivos *.hbm.xml na pasta “hibernate” do projeto criado.

 

Ainda é posível utilizar classes com Java 5 e annotations, basta colocar as classes na pasta “src/java”.

 

Mesmo customizando a configuração do Hibernate, ainda é possível utilizar todos os métodos dinâmicos fornecidos pelo Grails, como a busca “findAllByNomeLike” implementada no exemplo deste artigo.

 

Integrando o Spring

Para integrar o Spring com sua aplicação, pode-se editar o arquivo “/spring/resources.xml” localizado no projeto.

 

Abaixo um exemplo simples de configuração:

 

cod08parte2grails.JPG

 

Este componente gerenciado pelo Spring será automaticamente “injetado” na classe de Controller, se uma variável com o mesmo “id” configurado for encontrada, por exemplo:

 

class TesteController {

     def testeBean

 

     def list = {

        render(testeBean.teste())

     }

}

 

Para o código acima funcionar, a classe Java “teste.TesteImpl” precisa ser criada na pasta “/src/java”.

 

Conclusão

O segredo do Grails é utilizar frameworks consagrados como Hibernate, Spring e Sitemesh, e ainda utilizar ANT, HSQL e Jetty para deixar o ambiente de desenvolvimento simples e ágil.

 

A linguagem Groovy adiciona uma produtividade muito grande para desenvolver aplicações, devido a sua natureza dinâmica e simples. Ainda é possível utilizar APIs Java normalmente, conforme foi demonstrado no exemplo de criação de PDF.

 

O Grails está na versão 0.2, ainda muitas funcionalidades serão melhoradas e implementadas, mas com certeza ele é um projeto muito promissor e pode aumentar a produtividade com que aplicações Web são desenvolvidas.

 

  1. http://grails.codehaus.org/
  2. http://groovy.codehaus.org/
  3. http://www.jcp.org/en/jsr/detail?id=241

Para ler a primeira parte deste artigo, acesse:

http://www.devmedia.com.br/construindo-uma-aplicacao-crud-com-o-grails-parte-i/2445