Reaproveitando Código Com o Prelude

Ao se trabalhar com Taglibs em páginas JSP é normal a necessidade da importação de cada uma das bibliotecas utilizadas. Com o passar do tempo e o crescimento do projeto, fica um tanto quanto incômodo essas importações já que a quantidade de páginas se tornam cada vez maiores.

A situação se complica ainda mais quando utilizamos algum web-page layout como o Sitemesh e queremos importar essas bibliotecas diretamente no template para evitar retrabalho, mas nos deparamos com um erro de importação. Essa idéia não funciona, já que a decoração do template é feita em runtime e as bibliotecas são necessárias em tempo de compilação.

Veremos uma forma facilitada de fazer a importação das Taglibs com o Prelude de forma transparente e sem maiores esforços.

Objetivo:

Criar uma página Prelude para manter os imports das Taglibs necessárias e colocá-la como include automático nas outras páginas evitando o retrabalho de importação.

Criando o Prelude:

Será criado uma página com uma nova extensão chamada prelude.jspf, dentro de WEB-INF/jsp, que manterá os imports que serão utilizados:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

Nesta página poderá ser importada qualquer Taglib desejada, assim como códigos que devem estar presentes em todas as páginas como, por exemplo, o de alteração do locale do sistema.

E por fim basta que este prelude seja mapeado e configurado no web.xml:

<jsp-config>
  <jsp-property-group>
  <url-pattern>*.jsp</url-pattern>
  <page-encoding>ISO-8859-1</page-encoding>
  <include-prelude>/WEB-INF/prelude.jspf</include-prelude>
  </jsp-property-group>
</jsp-config>

O url-pattern indica que os arquivos terminados com .jsp terão o Prelude incluído como “cabeçalho”. Também foi configurado o encode da página e o caminho do arquivo.

O include pode ser testado em páginas distintas usando algumas tags:

<c:set var="text" value="CoffeeScript" />

<c:out value="Core works!" />

<c:out value="${fn:length(text)}" />

<fmt:setLocale value="en_US"/>
<fmt:formatNumber type="currency" value="42000"/>

Aqui foi utilizada as Taglibs Core, Function e Format sem a necessidade da importação explícita. Desta forma conseguimos trabalhar sem nos preocupar tanto com coisas triviais, agilizando o desenvolvimento.

https://github.com/wbotelhos/reaproveitando-codigo-prelude