AMILY: 'Verdana','sans-serif'; mso-bidi-font-family: Palatino">É comum em aplicações web a necessidade de apresentar algum tipo de listagem para o usuário, e quando a quantidade de itens é grande, torna-se importante exibir os dados de forma paginada, reduzindo os tempos de resposta e mantendo a escalabilidade da aplicação. A paginação de dados resolve vários problemas. Normalmente apenas alguns dados de uma consulta são realmente utilizados; a exibição de listagens extensas pode consumir muitos recursos do servidor de banco de dados, e aumentar desnecessariamente o tráfego da rede e o consumo de memória (causando a instanciação de um grande número de objetos que não serão usados).
Muitas vezes são criadas soluções próprias para a paginação. Acaba-se “reinventando a roda” quando há ferramentas prontas que podem ajudar muito, ou até mesmo solucionar inteiramente o problema. Dentre as várias alternativas, escolhemos duas bibliotecas de tags (taglibs) com enfoques diferentes, mas capacidades semelhantes de paginação: a Pager Tag Library e a Display Tag Library. A primeira é voltada totalmente para a paginação; a segunda é mais forte na apresentação dos dados. Vamos mostrar exemplos de ambas, buscando um resultado semelhante ao da Figura 1 – uma listagem paginada com índice para navegação, num estilo bastante popular na web. Nos arquivos disponíveis para download, incluímos exemplos que usam recursos exclusivos de cada taglib.
Usamos também tags da JSTL, a biblioteca padrão de JSP (veja detalhes sobre o assunto na série de artigos “JSTL – Guia Completo”, nas Edições 7, 8 e 9). Para executar as aplicações, utilizamos o Tomcat e uma base de dados MySQL, que pode ser criada com o script da Listagem 1. Veja os detalhes básicos da configuração desse ambiente nos quadros “Primeiros passos” e “Instalação das taglibs”.
No quadro “Versão alternativa com HSQLDB”, mostramos como configurar o ambiente para utilizar esse banco de dados embutido, em vez do MySQL, criando uma solução “autocontida” (veja detalhes sobre o HSQLDB na Edição 7). Finalmente, no quadro “Paginação na web ou no banco de dados” são analizados os limites e aplicabilidade das bibliotecas de tags apresentadas.
Pager
A taglib Pager oferece tudo o que é realmente necessário para a paginação de dados, embora apresente poucos recursos de customização. Ela é distribuída em um pacote WAR, é software livre (LGPL) e vem com vários exemplos que simulam a aparência de buscadores populares, como Google, Yahoo e Altavista.
A Listagem 2 mostra um exemplo utilizando a taglib Pager e as tags sql da JSTL, usadas para o acesso ao banco de dados (note que referenciamos uma folha de estilos CSS, para padronizar a formatação).
Veja a estrutura simplificada usada para as tags da biblioteca Pager :
<pg:pager ... >
<pg:param ... />
<!-- Itens para paginação: uma tag por item -->
<pg:item> ... </pg:item>
<!-- Indice do paginador -->
<pg:index>
<! -- Elementos de paginação -->
<pg:first> ... </pg:first>
<pg:prev> ... </pg:prev>
<pg:page> ... </pg:page>
<pg:pages> ... </pg:pages>
<pg:next> ... </pg:next>
<pg:last> ... </pg:last>
<pg:skip> ... </pg:skip>
</pg:index>
</pg:pager>
...