A Tag File faz parte da especificação JSP 2.0 e muita gente não sabe quais os benefícios que ela traz no desenvolvimento de aplicações para a web. Uma Tag File nada mais é do que um pequeno código de arquivo JSP. A sua função é justamente criar pequenos fragmentos de códigos para um determinado fim. Ela ajuda na orgazinação e design da sua aplicação, retirando uma fatia de códigos comuns e repetitivos das suas páginas JSPs. Suporta EL, JSTL e quaisquer tag libs, incluindo tags de frameworks, como por exemplo as tags do Struts.
No exemplo utilizei apenas JSTL. No final do post você encontrará o caminho para baixar o jar.
Onde colocar as tag files
A especificação determina que as tags sejam criadas em um .jar no diretório META-INF/tags. Para essa configuração é necessário criar arquivos tlds que contêm a configuração necessária para o funcionamento das tags.
Para ser mais fácil e rápido, no exemplo iremos colocar a tag file no diretório WEB-INF/tags, com isso não precisamos ficar gerando o jar a cada alteração na tag.
Principais tags
- tag
Tag inicial que informa qual o encoding da tag file. Seu principal atributo é o pageEncoding.
- attribute
Essa tag é encarregada de informar para o desenvolvedor quais os atributos que a tag file disponilizida. Seus principais atributos são:
name: determina um nome para o atributo
type: define um tipo (Object, String, Boolean, Integer e etc)
required: informa se o atributo é obrigatório
rtexprvalue: informa se o valor do atributo pode ser uma expressão JSP. Ela deve ser processada antes de ser enviada para a tag.
Codificando
Vamos criar uma tag file simples, de nome text, que tem como lógica renderizar um input do tipo text ou password, dependendo do valor do atributo tipoInput passado.
Tag File<%@tag pageEncoding="UTF-8"%>
<%-- Importando a JSTL --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%-- Atributos --%>
<%@attribute name="tipoInput" type="java.lang.Boolean"%>
<%@attribute name="tituloCampo"%>
<%@attribute name="id"%>
<%@attribute name="name"%>
<%-- Tags condicionais da JSTL --%>
<c:choose>
<c:when test="${tipoInput}">
${tituloCampo} <input type="text" name="${name}" id="${id}">
</ when>
<c:otherwise>
${tituloCampo} <input type="password" name="${name}" id="${id}">
</ otherwise>
</ choose>
JSP
<%@taglib prefix="tag" tagdir="/WEB-INF/tags" %>
<html>
<head>
<title>Exemplo Tag File</ title>
<head>
<body>
<tag:text tituloCampo="Campo" id="text" name="text" />
</ body>
</ html>
Considerações Finais
Ao executar esses códigos numa aplicação web o resultado será a renderização de um campo na tela do tipo input text ou password, dependendo da opção que você escolher.
O valor default de um objeto do tipo Boolean é null, então para podermos mostrar na tela um input do tipo text precisaremos passar o valor true no atributo tipoInput na JSP.
Note que não precisei configurar o Deployment Descriptor (web.xml) e nem criar um arquivo de configuração de tag libs (.tld).
Portanto, a utilização de tag files traz grandes benefícios para o desenvolvedor e para quem precisar refatorar ou modificar os códigos das JSPs da aplicação no futuro, por diminuir a quantidade de códigos repetidos e trazer simplicidade e dinamismo.
Download do .jar da JSTL