Artigo Java Magazine 12 - Tags Customizadas em JSP 2.0

Neste artigo são apresentados os Simple Tags, uma nova técnica de implementação de bibliotecas de tags (taglibs) introduzida no JSP 2.0.

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

Clique aqui para ler esse artigo em PDF.

Tags Customizadas em JSP 2.0

Simplicidade com Simple Tags

Conheça uma nova forma, ao mesmo tempo simples e poderosa, de criar tags customizadas no JSP 2.0

Neste artigo são apresentados os Simple Tags, uma nova técnica de implementação de bibliotecas de tags (taglibs) introduzida no JSP 2.0. Com Simple Tags, podem ser criados todo tipo de tags, com mais facilidade: desde tags com corpo vazio, passando por tags que, dependendo de uma determinada condição, incluem ou não seu corpo, até tags que processam o corpo repetidas vezes.

Os Simple Tags serão apresentados através de exemplos passo a passo, de modo a facilitar, para aqueles que já conhecem as versões anteriores de JSP, a comparação com a implementação de "tags clássicos" (JSP 1.1/1.2). Para rodar os exemplos é necessário o Tomcat 5.x e o JSDK 1.4.x – veja como preparar o ambiente necessário no quadro "Primeiros Passos".

O novo JSP

O JSP 2.0 introduz uma série de facilidades, entre as quais se destaca a Expression Language (EL), que facilita o acesso a objetos e suas propriedades, através de uma sintaxe similar à de JavaScript. A EL foi apresentada nos artigos “Novidades do JSP 2.0”, da Edição 6, e “JSTL – Guia Completo, Parte 1”, da Edição 7. A proposta da Expression Language, em conjunto com a biblioteca padrão de tags JSTL, é substituir o uso de scripts em páginas JSP. Lembrando: scripts JSP são declarações, scriptlets e expressões. Veja exemplos de cada tipo de script JSP:

·Declaração – <%! Usuario usuario; %>

·Scriptlet –  <% usuario = (Usuario) request.getAttribute(“usuario”); %>

·Expressão – <%= usuario.getNome() %>

 

Mas o que há de errado com scripts JSP? Na verdade, depende da forma que são usados. Páginas JSP devem ser utilizadas para formatar a apresentação para os clientes, e scripts JSP permitem incluir nas páginas qualquer código Java. O problema é que, dado o seu poder e sua praticidade, desenvolvedores muitas vezes sentem-se tentados a fazer uso excessivo de scripts, não apenas para fins de apresentação, mas também para codificar regras de negócio; estas deveriam ser centralizadas em uma camada separada de componentes, como em EJBs ou em classes Java comuns.

O uso exagerado de scripts leva a sistemas com regras de negócio duplicadas, trazendo dores de cabeça na hora da manutenção. Gerentes cansados de ver enormes blocos de código Java em páginas JSP apreciarão o novo elemento do descritor web.xml, que proíbe o uso de scripts JSP nas páginas.

O certo é que a Expression Language vem não apenas para facilitar a manipulação de objetos e suas propriedades, mas, junto com a JSTL, oferece funcionalidade suficiente para criar qualquer tipo de apresentação, livre de scripts JSP.

EL, JSTL e Tags Customizadas

Mas o que têm a ver a EL e a JSTL com as novas formas de criação de tags em JSP 2.0? Muito. A JSTL fornece uma biblioteca padrão suficiente para implementar a maioria dos controles necessários nas páginas JSP. Como sabemos, tags customizadas permitem estender a biblioteca de tags padrão com ações especificas às necessidades de nossos projetos. Esse recurso foi incluído no JSP 1.1 e aperfeiçoado no JSP 1.2, mas quem já criou tags usando essas versões conhece a dificuldade de entender o funcionamento dos diversos métodos e tipos de retorno definidos.

Foram muitos os pedidos para que o JSP fornecesse uma forma mais simples de desenvolvimento de tags customizadas – e o grupo que controla a nova especificação atendeu às solicitações. Baseando-se na EL, foram adicionadas duas novas técnicas para a criação de tags: Simple Tags e Tag Files. Neste artigo, são detalhados os Simple Tags.

Simple Tags são mais simples de implementar que os tags clássicos (do JSP 1.1 e 1.2), pois seu objetivo é trabalhar apenas com a EL, e não com scripts JSP – porém têm o mesmo poder funcional. Toda a lógica de processamento de um Simple Tag fica em um único método, doTag(), em uma classe que implementa a interface javax.servlet.jsp.tagext.SimpleTag.

Hello Simple Tags

Nosso primeiro exemplo implementa um Simple Tag que apresenta a tradicional saudação “Hello, world!” (veja a Figura 1). Ele é constituído de três arquivos: a página que usa o tag (Hello.jsp), o descritor da biblioteca de tags (simple-tag.tld) e a classe que implementa a lógica do tag (HelloTag.java). Os leitores que conhecem as técnicas de implementação de tags das versões anteriores de JSP podem pular os primeiros passos, passando diretamente para a criação da classe.

Vale lembrar que o web.xml de JSP 2.0/Servlet 2.4 – e todos os outros descritores do J2EE 1.4 (veja links) – são definidos através de XML Schema, e não mais por DTDs (uma das vantagens disso é que não é obrigatório manter a ordem dos elementos). A Listagem 1 apresenta o descritor usado para vários exemplos deste artigo.

A página Hello.jsp (Listagem 2) demonstra o uso do Simple Tag hello. A primeira coisa a fazer é declarar a biblioteca de tags utilizada na página com a diretiva taglib, especificando o prefixo "simpletag" e a URI "javamagazine_simple_tags". Após isto podemos usar "simpletag" para referenciar qualquer tag definido na biblioteca javamagazine_simple_tags, em particular o tag chamado hello, que irá imprimir a mensagem  de saudação na página.

O arquivo simple-tag.tld (Listagem 3) define as propriedades da biblioteca de tags e deve estar dentro do diretório WEB-INF, preferencialmente em um subdiretório, por exemplo WEB-INF/tlds. Lembre-se que o container irá localizar e ler automaticamente todos os arquivos com extensão .tld, identificando as possíveis bibliotecas de tags usadas pela aplicação, antes de iniciá-la.

No exemplo, é definida a versão da biblioteca ("1.0") e seu nome ("javamagazine_simple_tags"), o mesmo usado na diretiva taglib da página. O elemento é usado para especificar cada um dos tags da biblioteca. Nele é definido o nome que será usado pelas páginas para invocar o tag (hello), além da classe que implementa seu processamento (jm.simpletags.HelloTag). Por fim, a propriedade body-content indica que o corpo do tag não pode possuir nenhum conteúdo (empty).

Os passos até aqui são iguais aos realizados para tags clássicos. A diferença aparece na classe de implementação (Listagem 4). Os Simple Tags estendem a classe SimpleTagSupport (que implementa a interface SimpleTag), e implementam a lógica do tag em doTag(). A classe SimpleTagSupport fornece métodos para recuperar o corpo do tag e o contexto da página, entre outras funcionalidades.

O exemplo utiliza o método getJspContext() para recuperar o contexto da página – um objeto JspContext, novo no JSP 2.0, que define métodos para manipular atributos, tratar tags aninhados e recuperar o objeto implícito out (veja mais no quadro “Mudança de Contexto”). Por fim, obtém-se do contexto a variável implícita out, usada para inserir na página a mensagem de saudação.

Definição de Atributos

O tratamento de atributos em tags em JSP 2.0 é igual ao das versões anteriores. Para incluir um atributo, devem ser definidas suas propriedades no .tld e incluído um método setXXX() correspondente na classe de implementação.

Vamos adicionar um atributo – user – para que usuários sejam cumprimentados pelo nome (veja um exemplo na Figura 2). O JSP da Listagem 5 demonstra o uso da tag com o novo atributo. Note que, para o atributo foi especificado um valor fixo, mas numa aplicação real o valor seria obtido dinamicamente, de um objeto que identificasse o usuário, geralmente usando uma expressão EL, como:

 

" [...] continue lendo...

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados