Esse artigo faz parte da revista Java Magazine edição 19. Clique aqui para ler todos os artigos desta edição

jm19_capa.gif 

Clique aqui para ler esse artigo em PDF.imagem_pdf.jpg

Struts em Pedaços

Reutilize Design em JSPs usando o Tiles

O Tiles permite criar templates para aplicações Struts, simplificando a tarefa de dar cara nova ao seu site

Um problema comum no desenvolvimento de aplicações web extensas é a dificuldade no reaproveitamento de layouts e soluções gerais de design gráfico. Em aplicações corporativas, há geralmente muitas JSPs com partes em comum, o que gera muito código repetitivo e dificulta mesmo pequenas mudanças. Este artigo foca na utilização prática do Tiles, o mecanismo de templates do Struts, que torna possível reutilizar layouts de páginas de forma estruturada.

Mudanças de layouts

É fácil perceber alguns exemplos de layouts em aplicações web. A Figura 1 mostra dois modelos típicos, contendo elementos comuns, como menu e rodapé. Agora imagine que seu cliente queira modificar o layout básico da aplicação do primeiro para o segundo modelo; quantas páginas você teria que alterar em um projeto grande! Isso se você não estiver usando um mecanismo de templates, como Velocity, FreeMarker, SiteMesh, WebMacro – ou o Tiles.

O Tiles vem integrado e é fácil de usar com o Struts, ficando acessível através de uma taglib embutida. Sites baseados no Tiles são montados com peças, ou "ladrilhos". Assim, você pode modelar uma vez e replicar o layout em todo um grupo de páginas (ou mesmo em todas as páginas) de uma aplicação web.

Vamos desenvolver uma pequena aplicação utilizando o Tiles. Você pode usar qualquer IDE ou editor. Para facilitar, o download do artigo disponível no site da Java Magazine inclui um buildfile do Ant que automatiza o processo de construção e instalação do exemplo. Ao final, teremos criado a estrutura de diretórios na Figura 2.

Página de modelo

O primeiro passo é criar uma página (padrao.jsp) que servirá de base para o layout das outras páginas da aplicação. Definimos a estrutura usando tabelas HTML (também poderíamos ter usado layers). O objetivo é o primeiro layout da Figura 1, portanto vamos criar as "porções" topo, menu, rodape e conteudo. Observe a página base na Listagem 1. No começo, vemos a declaração da tag library do Tiles:

 

<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>

 

Em seguida, declaramos as porções dentro do código HTML usando a taglib tiles: <tiles:get name="topo"/>, <tiles:get name="menu"/> etc. Na execução da página, estas tags serão substituídas pelas páginas informadas no arquivo de definição tiles-defs.xml.

O arquivo de definição

O arquivo tiles-defs.xml contém a especificação das definições do Tiles e a parte principal do mecanismo e maior responsável pela flexibilidade na manutenção dos layouts. No tiles-defs, você poderia por exemplo, criar uma definição "index" para as páginas iniciais de cada seção do site, "cadastro" para páginas de entrada de dados, "relatorio" para listagens, e assim por diante.

Veja o arquivo de definições para nosso exemplo na Listagem 2. Dentro do elemento <definition>, a propriedade name do elemento <put> identifica a porção; value informa a página a ser substituída. Por exemplo, definindo-se <put name=”topo” value=”topo.jsp”>, o tag <tiles:get name="topo"/> no JSP será substituído pela página topo.jsp.

Indo além, você pode usando herança para criar definições filhas, que redefinem apenas algumas porções, reaproveitando o layout de uma definição base. Veja na Listagem 3 a herança em ação. Observe que para a definição jm.naoEncontrado foi necessário apenas alterar a porção conteudo. Já na definição de jm.cadastros.usuarios, foi alterado também menu, que recebeu comandos de um cadastro típico.

Ajustes no struts-config

O próximo passo é alterar o arquivo de configuração do Struts. Primeiro, precisamos configurar o plug-in do Tiles:

 

<plug-in className="org.apache.struts.tiles.TilesPlugin">

   <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" /> ...

Quer ler esse conteúdo completo? Tenha acesso completo