JSP Tag Libraries
Quando comecei a desenvolver com Java para web, uma das coisas
que mais me frustrava no desenvolvimento JSP era a mistura de código Java com
HTML, tornando as páginas pouco intuitivas tanto para os programadores, quanto
para os web designers.
Decidi então questionar o motivo pelo qual o JSP não tivesse algo
parecido. Para minha surpresa, descobri que possui algo melhor: a possibilidade
de desenvolver tags personalizadas, montando tag libraries (bibliotecas de
tags). Para ilustrar o uso de tag libraries, vamos criar uma tag personalizada
simples.
Estados
Existe um grande número de cadastros que possuem um campo correspondente ao Estado/UF. Por comodidade e com o objetivo de limitar a entrada somente a Estados válidos, é comum usarmos caixas de seleção com a tag HTML <select>(veja a Listagem 1).
Em uma rápida inspeção, observamos alguns problemas com este código:
- Não reutilização de código.O código não é reutilizável e estimula a prática de copiar e colar. É comum encontrar páginas JSP com o mesmo código repetido várias vezes, literalmente copiado.
- Manutenção difícil. O código é difícil de manter. Se um
novo Estado for adicionado, ou se for necessário mostrar a lista de estados de
forma diferente, teremos que procurar em todas as páginas e alterar cada uma
delas.
- Ausência de separação entre HTML e Java. Note que para inserir aspas, temos que usar o caractere de escape barra (\), e que a endentação para o código Java é diferente da usada em código HTML, tornando-o difícil de ler.
- Dificuldade na depuração. Você já viu os erros que o container JSP gera
quando esquecemos um ponto-e-vírgula? E se você precisar executar
passo-a-passo?Você usa System.out.println ()?
Obviamente, existem várias soluções mais elegantes. Dentre elas, uma das melhore sé o uso de tag libraries.
Listagem 1. Código JSP sem uso de tag libraries
<%
String[] estados = {“Alagoas”, “Amazonas”,/* ... */ “Tocantins”};
String[] siglas = {“AL”,
“AM”,/* ... */ “TO”};
String selectedEstado = request.getParameter(“estado”);
out.println (“<select
name=\”estado\”>”);
out.println (“<option
value=\”\”> </option>”); ...