Grails: do Groovy à Web – Parte 1
Grails: do Groovy à Web – Parte 2
Grails: do Groovy à Web – Parte 3
Grails: do Groovy à Web – Parte 4
Este artigo retrata a camada de visualização do Grails, cujo principal componente é a tecnologia GSP (Groovy Server Pages). Também nos aprofundaremos em assuntos como criação de bibliotecas de tags customizadas, templates, gerenciamento de layouts e Ajax.
Para que serve:
A camada de visualização é vital em uma aplicação web por ser o elemento com o qual nossos usuários interagem diretamente. Sendo assim, é fundamental a compreensão deste componente do framework para que possamos criar interfaces gráficas de qualidade para nossos clientes.
Em que situação o tema é útil:
A camada de visualização é a responsável por interagir diretamente com nossos usuários. Ter domínio sobre ela é de grande importância para que possamos construir interfaces gráficas de qualidade.
Grails do Groovy à Web – Parte 5:
Neste artigo trataremos da camada de visualização do Grails, conheceremos a tecnologia GSP (Groovy Server Pages) e abordaremos os demais recursos oferecidos por esta camada: uso de templates, criação de tags customizadas, gerenciamento de layouts com SiteMesh e Ajax.
Chegamos à última parte do minicurso sobre Grails. Após conhecermos o funcionamento dos controladores e do mecanismo de persistência (GORM), é hora de abordarmos a camada de visualização do framework, que é de vital importância, pois é a responsável pela construção da interface gráfica do nosso sistema.
Iniciaremos tratando do pilar da camada de visualização que é a tecnologia GSP. Os leitores que já desenvolveram aplicações web usando a plataforma Java EE sentirão certa familiaridade com esta tecnologia, o que é natural, visto que o GSP, por ser influenciado pelo JSP, acaba por se mostrar bastante semelhante. A diferença é que algumas das tarefas, como é normal em Grails, são bem mais fáceis de implementar, por exemplo, a criação de tags customizadas.
Finalizado este tema, trataremos de recursos que aumentam significativamente a produtividade do desenvolvedor: estamos falando da utilização de templates, criação de tags customizadas e o gerenciamento de layouts usando SiteMesh.
Outro tema que não poderia ficar de fora é o Ajax. Veremos como é fácil adotar esta técnica usando o framework sem que seja necessário escrever uma única linha Javascript para tratar das requisições ao servidor.
Groovy Server Pages (GSP)
O principal componente por trás da camada de visualização do Grails é o Groovy Server Pages (GSP), que foi desenvolvido levando em consideração dois objetivos: ser familiar aos desenvolvedores acostumados com JSP ou ASP e, ao mesmo tempo, ser mais intuitivo e flexível que suas fontes de inspiração.
Por convenção, todos os arquivos GSP são armazenados no diretório grails-app/views da aplicação e possuem o sufixo .gsp.
Assim como uma página JSP, uma página GSP é uma mistura de três elementos:
• Linguagem de marcação (HTML);
• Tags customizadas;
• Lógica de negócio (scriptlets, desta vez escritos em Groovy ao invés de Java).
Apesar de permitir a inclusão de scriptlets em seu conteúdo, esta não é uma prática recomendada pelas seguintes razões:
• Os scripts acabam por acidentalmente incluir na camada de visualização elementos da lógica de negócio, quebrando assim o isolamento entre as camadas;
• A camada de visualização deve ser a mais próxima possível do web designer, que nem sempre entende de programação;
• Scriptlets tornam mais difícil a manutenção das páginas, pois aumentam a sua complexidade e dificilmente favorecem o reaproveitamento de código;
• Na grande maioria das vezes um scriptlet pode ser substituído por uma tag customizada.
Similaridades sintáticas entre GSP e JSP
Como mencionado, um dos objetivos do GSP é ser familiar a desenvolvedores acostumados a trabalhar com JSP. As similaridades expostas abaixo, no entanto, deverão ser vistas apenas como um pré-aquecimento ao nosso aprofundamento na tecnologia, pois esta apresenta alternativas bem mais interessantes.
Scriptlets
A mesma sintaxe que estamos acostumados a usar em páginas JSP pode ser aplicada no GSP. A única diferença está na linguagem usada para escrever o código fonte, Groovy ao invés de Java.
Todo bloco de código deverá estar contido entre as sequências <% e %>, como no exemplo abaixo:
<% var numero = 10 // definindo uma variável
while (numero > 0) { %>
<p> ${numero--} </p>
<% } %>
O código é bastante simples. Criamos uma variável chamada numero e a iniciamos com o valor 10. Em seguida definimos um loop cujo corpo é executado enquanto o valor desta variável for maior que 0. Repare que assim como no PHP e em páginas JSP, também é possível intercalar código e linguagem de marcação.
Outro ponto importante a ser observado é que, assim como no tratamento de strings do Groovy, podemos também usar a intercalação de valores, o que é justamente o que fazemos no interior do loop ao retornarmos o valor decrementado da variável numero: ${numero--}.
Inclusão de resultado
É possível incluir no corpo HTML o resultado de uma função ou o valor de uma variável usando a diretiva <%= expressão|variável %>. No corpo da diretiva deverá estar contida uma variável ou expressão, cujo resultado será em seguida inserido no corpo da página, como no exemplo abaixo:
Hoje é <%= new java.util.Date() %>
Uma alternativa bem mais legível é utilizar a sintaxe ${expressão|variavel}, como no código:
Hoje é ${new java.util.Date()}
Comentários
A mesma sintaxe de comentários adotada pelo JSP aplica-se também a uma página GSP. Tudo o que estiver entre <%-- e --%> será considerado um comentário e, portanto ignorado pelo compilador, tal como no exemplo:
Hoje é ${new java.util.Date()}
<%-- Isto inicia um comentário. Tudo o que estiver neste bloco não será processado:
<%= 1900 + 110 %> 2010 não será impresso. --%>
Variáveis e escopos
Uma página GSP para ser útil deve poder expor o valor de algumas variáveis para o usuário do sistema. No caso do Grails, as variáveis são provenientes de dois tipos de fonte que descreveremos a seguir (modelo e escopos).
Modelo
Modelo (model) é o conjunto de variáveis retornadas pelo controlador e diretamente acessadas pelas páginas relacionadas. Tal como vimos anteriormente, o modelo é um mapa do tipo chave-valor.
Para ilustrar o funcionamento do modelo, usaremos a action list definida no controlador PostController, apresentada na Listagem 1, e a sua visualização associada, o arquivo grails-app/view/post/list.gsp, exposto na Listagem 2.
Listagem 1. Action list do controlador PostController.
...