Um guia para a biblioteca JSTL

Um guia para a biblioteca JSTL

1. Visão geral

A biblioteca de tags do JavaServer Pages (JSTL) é um conjunto de tags que podem ser usadas para implementar algumas operações comuns, como loop, formatação condicional e outras.

Neste tutorial, discutiremos como configurar JSTL e como usar suas inúmeras tags.

2. Configuração

Para habilitar os recursos JSTL, teríamos que adicionar a biblioteca ao nosso projeto. Para um projeto Maven, adicionamos a dependência no arquivopom.xml:


    javax.servlet
    jstl
    1.2

Com a biblioteca adicionada ao nosso projeto, a configuração final será adicionar a tag JSTL principal e o arquivo de namespace de qualquer outra tag ao nosso JSP usando a diretiva taglib como esta:

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

A seguir, daremos uma olhada nessas tags, que são amplamente agrupadas em cinco categorias.

3. Tags principais

A biblioteca principal de tags JSTL contém tags para executar operações básicas, como impressão de valores, declaração de variáveis, tratamento de exceções, execução de iterações e declaração de instruções condicionais, entre outros.

Vamos dar uma olhada nas tags principais.

3.1. A tag<c:out>

<c:out> é usado para exibir valores contidos em variáveis ​​ou o resultado de uma expressão implícita.

Ele tem três atributos:value, default, and escapeXML. O atributoescapeXML gera tags XML brutas contidas no atributovalue ou em seu invólucro.

Um exemplo de tag<c:out> será:

3.2. A tag<c:set>

A tag<c:set> é usada para declarar variáveis ​​com escopo em JSP. Também podemos declarar o nome da variável e seu valor nos atributosvarevalue respectivamente.

Um exemplo terá o formato:

3.3. A tag<c:remove>

A tag<c:remove> remove variáveis ​​com escopo que é equivalente a atribuirnull a uma variável. Leva os atributosvarescope comscope tendo um valor padrão de todos os escopos.

Abaixo, mostramos um exemplo de uso da tag<c:remove>:

3.4. A tag<c:catch>

A tag<c:catch> captura qualquer exceção lançada em seu gabinete. Se a exceção for lançada, seu valor será armazenado no atributovar desta tag.

O uso típico pode parecer com:


    <% int x = Integer.valueOf("a");%>

E para verificar se a exceção é lançada, usamos a tag<c:if> conforme mostrado abaixo:


    

The exception is : ${exceptionThrown}
There is an exception: ${exceptionThrown.message}

3.5. A tag<c:if>

O<c:if> é uma tag condicional que exibe ou executa seus scriptlets incluídos apenas quando seu atributotest é avaliado como verdadeiro. O resultado da avaliação pode ser armazenado em seu atributovar.

3.6. Tags<c:choose>,<c:when>e<c:otherwise>

O<c:choose> é uma tag pai que é usada na execução de expressões tipo switch ou if-else. Possui duas subetiquetas; <c:when> e<c:otherwise> que representam if / else-if e else respectivamente.

<c:when> recebe um atributotest que contém a expressão a ser avaliada. Abaixo, mostramos um exemplo de uso dessas tags:



    
        
    
    
        
    
    
        
    

3.7. A tag<c:import>

A tag<c:import> lida com a busca e exposição de conteúdo de URLs absolutos ou relativos.

Podemos usar os atributosurlevar para manter a URL e o conteúdo obtido da URL, respectivamente. Por exemplo, podemos importar o conteúdo de um URL da seguinte forma:

3.8. A tag<c:forEach>

A tag<c:forEach> é semelhante à sintaxe Java para, while ou do-while. O atributoitems contém a lista de itens a serem iterados, enquanto os atributosbegineend contêm o índice inicial e final, respectivamente (indexação zero).

A tag<c:forEach> também possui um atributostep que controla o tamanho do incremento do índice após cada iteração. Abaixo, mostramos um exemplo de uso:


    Item 

3.9. A tag<c:forTokens>

A tag<c:forTokens> é usada para dividir aString em tokens e iterar por meio deles.

Semelhante à tag<c:forEach>, ela tem um atributoitems e um atributodelim adicional que é o delimitador paraString como este:


    

3.10. Tags<c:url> e<c:param>

A tag<c:url> é útil para formatar um URL com a codificação de solicitação adequada. o URL formatado é armazenado no atributovar.

A tag<c:url> também tem uma subtag<c:param> que é usada para especificar parâmetros de URL. Mostramos um exemplo abaixo:


    
    

3.11. A tag<c:redirect>

A tag<c:redirect> executa uma reescrita de URL e redireciona o usuário para a página especificada em seu atributourl. Um caso de uso típico terá a seguinte aparência:

4. Tags de formatação

A biblioteca de tags de formatação JSTL fornece uma maneira conveniente de formatar texto, números, datas, horas e outras variáveis ​​para melhor exibição.

As tags de formatação JSTL também podem ser usadas para aprimorar a internacionalização de um site.

Antes de usar essas tags de formatação, devemos adicionar a taglib ao nosso JSP:

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

Vamos identificar as várias tags de formatação e como elas podem ser usadas.

4.1. A tag<fmt:formatDate>

A tag<fmt:formatDate> é útil na formatação de datas ou horas. O atributovalue contém a data a ser formatada e o atributotype assume um de três valores; date, time or both.

<fmt:formatDate> também tem um atributopattern onde podemos especificar o padrão de formatação desejado. Abaixo está um exemplo de um dos padrões:


4.2. A tag<fmt:parseDate>

A tag<fmt:parseDate> é semelhante à tag<fmt:formatDate>.

A diferença é que com a tag<fmt:parseDate>, podemos especificar o padrão de formatação em que o analisador de data subjacente deve esperar que o valor de data esteja.

Podemos analisar datas:


4.3. A tag<fmt:formatNumber>

A tag<fmt:formatNumber> lida com a renderização de números em um padrão ou precisão específico que pode sernumber, currency or percentage conforme especificado em seu atributotype. Um exemplo de uso de<fmt:formatNumber> seria:


4.4. A tag<fmt:parseNumber>

A tag<fmt:parseNumber> é semelhante à tag<fmt:formatNumber>. A diferença é que com a tag<fmt:parseNumber>, podemos especificar o padrão de formatação em que o analisador de número subjacente deve esperar que o número esteja.

Poderíamos usar isso como:

4.5. A tag<fmt:bundle>

A tag<fmt:bundle> é uma tag pai da tag<fmt:message>. <fmt:bundle> cria o pacote especificado em seu atributobasename para as tags<fmt:message> incluídas.

A tag<fmt:bundle> é útil para habilitar a internacionalização, pois podemos especificar objetos específicos do local. O uso típico terá o formato:


    



4.6. A tag<fmt:setBundle>

A tag<fmt:setBundle> é usada para carregar um pacote de recursos em JSP e torná-lo disponível em toda a página. O pacote de recursos carregado é armazenado no atributovar da tag<fmt:setBundle>. Podemos definir o pacote:

4.7. A tag<fmt:setLocale>

A tag<fmt:setLocale> é usada para definir a localidade para as seções em JSP colocadas após sua declaração. Normalmente, definiremos isso da seguinte maneira:

fr_FR representa o código do idioma francês neste caso.

4.8. A tag<fmt:timeZone>

A tag<fmt:timeZone> é uma tag pai que especifica o fuso horário a ser usado por qualquer formatação de hora ou ações de análise por tags em seu gabinete.

Este parâmetro de fuso horário é fornecido por seu atributovalue. Um exemplo de uso é mostrado abaixo:


    

4.9. A tag<fmt:setTimeZone>

A tag<fmt:setTimeZone> pode ser usada para copiar o fuso horário especificado em seu atributovalue para uma variável com escopo especificada em seu atributovar. Definimos isso por:

4.10. A tag<fmt:message>

A tag<fmt:message> é usada para exibir a mensagem de internacionalização. O identificador exclusivo da mensagem a ser recuperada deve ser passado para seu atributokey.

Um pacote específico para consultar a mensagem, que também pode ser especificado por meio do atributobundle.

Isso pode ser assim:


4.11. A tag<fmt:requestEncoding>

A tag<fmt:requestEncoding> é útil para especificar o tipo de codificação para formulários com um tipo de açãopost.

O nome da codificação de caracteres a ser usada é fornecido por meio do atributokey da tag<fmt:requestEncoding>.

Vejamos um exemplo abaixo:

5. Tags XML

A biblioteca de tags XML JSTL fornece maneiras convenientes de interagir com dados XML em um JSP.

Para poder acessar essas tags XML, adicionaríamos a biblioteca de tags ao nosso JSP:

<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

Vejamos as diferentes tags na biblioteca de tags JSTL XML.

5.1. A tag<x:out>

A tag<x:out> é semelhante à tag scriptlet<%= %> em JSP, mas<x:out> é usado especificamente para expressões XPath.

A tag<x:out> possui atributosselecteescapeXML usados ​​para especificar a expressão XPath para avaliarStringe permitir o escape de caracteres XML especiais, respectivamente.

Um exemplo simples é:

$output acima se refere a um arquivo XSL pré-carregado.

5.2. A tag<x:parse>

A tag<x:parse> é usada para analisar os dados XML especificados em seu atributoxml oudoc __ ou invólucro. Um exemplo típico seria:

5.3. A tag<x:set>

A tag<x:set> define a variável especificada em seu atributovar para a expressão XPath avaliada passada para seu atributoselect. Um exemplo típico seria:

5.4. A tag<x:if>

A tag<x:if> processa seu corpo se a expressão XPath fornecida a seu atributoselect for avaliada como verdadeira.

O resultado da avaliação pode ser armazenado em seu atributovar.

Um caso de uso simples será semelhante a:


    Document has at least one  element.

5.5. A tag<x:forEach>

A tag<x:forEach> é usada para loop nos nós em um documento XML. O documento XML é fornecido por meio do atributoselect da tag<x:forEach>.

Assim como a tag principal<c:forEach>, a tag<x:forEach> tem os atributosbegin, endestep.

Assim, teríamos:

  • Item Name:

5.6. Tags<x:choose>,<x:when>e<x:otherwise>

A tag<x:choose> é uma tag pai que é usada na execução de expressões tipo switch ou if / else-if / else e não tem atributos, mas inclui as tags<x:when>e<x:otherwise>.

A tag<x:when> é semelhante if / else-if e leva um atributoselect que contém a expressão a ser avaliada.

A tag<x:otherwise> é semelhante à cláusula else / default e não tem atributo.

Abaixo, mostramos um exemplo de caso de uso:


    
        Item category is Sneakers
    
    
        Item category is Heels
    
    
       Unknown category.
    

5.7. Tags<x:transform> e<x:param>

A tag<x:transform> transforma um documento XML em JSP aplicando uma linguagem de folha de estilo eXtensible (XSL) a ele.

O documento XML ouString a ser transformado é fornecido ao atributodoc enquanto o XSL a ser aplicado é passado ao atributoxslt da tag<x:transform>.

A tag<x:param> é uma subtag da tag<x:transform> e é usada para definir um parâmetro na folha de estilo de transformação.

Um caso de uso simples terá o formato:



    

6. Tags SQL

JSTL SQL tag library provides tags for performing relational database operations.

Para ativar as tags SQL JSTL, adicionamos o taglib ao nosso JSP:

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

As tags JSTL SQL suportam bancos de dados diferentes, incluindo MySQL, Oracle e Microsoft SQL Server.

A seguir, veremos as diferentes tags SQL disponíveis.

6.1. A tag<sql:setDataSource>

A tag<sql:setDataSource> é usada para definir as variáveis ​​de configuração JDBC.

Essas variáveis ​​de configuração são mantidas nos atributosdriver, url, user, passwordedataSource da tag<sql:setDataSource>, conforme mostrado abaixo:

Acima, o atributovar contém um valor que identifica o banco de dados associado.

6.2. A tag<sql:query>

A tag<sql:query> é usada para executar uma instrução SQL SELECT com o resultado armazenado em uma variável com escopo definida em seu atributovar. Normalmente, definiríamos isso como:


    SELECT * from USERS;

O atributosql da tag<sql:query> contém o comando SQL a ser executado. Outros atributos incluemmaxRows,startRow edataSource.

6.3. A tag<sql:update>

A tag<sql:update> é semelhante à tag<sql:query>, mas executa apenas operações SQL INSERT, UPDATE ou DELETE que não requerem um valor de retorno.

Um exemplo de uso seria:


    INSERT INTO USERS(first_name, last_name, email) VALUES
      ('Grace', 'Adams', '[email protected]');

O atributovar da tag<sql:update> contém o número de linhas que foram afetadas pela instrução SQL especificada em seu atributosql.

6.4. A tag<sql:param>

A tag<sql:param> é uma subtag que pode ser usada dentro da tag<sql:query> ou<sql:update> para fornecer um valor para um marcador de valor na instrução sql como este:


    DELETE FROM USERS WHERE email = ?
    

A tag<sql:param> tem um único atributo; value que contém o valor a ser fornecido.

6.5. A tag<sql:dateParam>

A tag<sql:dateParam> é usada dentro da tag<sql:query> ou<sql:update> para fornecer um valor de data e hora para um marcador de valor na instrução sql.

Podemos definir isso em nosso JSP assim:


    UPDATE Users SET registered = ? WHERE email = ?
    
    

Como a tag<sql:param>, a tag<sql:dateParam> tem um atributovalue com um atributotype adicional cujo valor pode ser um dedate, time outimestamp ( data e hora).

6.6. A tag<sql:transaction>

A tag<sql:transaction> é usada para criar uma operação semelhante a uma transação JDBC agrupando as tags<sql:query> e<sql:update> assim:


    
        UPDATE Users SET first_name = 'Patrick-Ellis' WHERE
          email='[email protected]'
    
    
        UPDATE Users SET last_name = 'Nelson' WHERE
          email ='[email protected]'
    
    
        INSERT INTO Users(first_name, last_name, email)
          VALUES ('Grace', 'Adams', '[email protected]');
    

A tag<sql:transaction> garante que todas as operações do banco de dados sejam processadas com sucesso (confirmadas) ou todas falhem normalmente (revertidas) se ocorrer um erro em qualquer uma das operações.

7. Funções JSTL

Os métodos JSTL são utilitários para manipulação de dados no JSP. Embora algumas funções tenham diferentes tipos de dados, a maioria deles é dedicada à manipulação deString.

Para ativar os métodos JSTL em JSP, adicionaríamos o taglib à nossa página:

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

Vejamos essas funções e como usá-las.

7.1. fn:contains() e fn: containsIgnoreCase ()

O métodofn:contains() avalia umString para verificar se ele contém uma determinada substring como esta:



    

Found 'first' in string

A funçãofn:contains() leva dois argumentosString; o primeiro é a fonteStringe o segundo argumento é a substring. Retorna um valor booleano, dependendo do resultado da avaliação.

A funçãofn:containsIgnoreCase() é uma variante do métodofn:contains() que não diferencia maiúsculas de minúsculas e pode ser usada assim:


    

Found 'first' string

Found 'FIRST' string

7.3. A funçãofn:endsWith()

A funçãofn:endsWith() avalia umString para verificar se seu sufixo corresponde a outra substring. Leva dois argumentos; o primeiro argumento é oString cujo sufixo deve ser testado enquanto o segundo argumento é o sufixo testado.

Podemos definir isso como:


    

String ends with 'string'

7.4. A funçãofn:escapeXml()

A funçãofn:escapeXML() é usada para escapar da marcação XML na entradaString assim:

${fn:escapeXml(string1)}

7.5. A funçãofn:indexOf()

A funçãofn:indexOf() verificaStringe retorna o índice da primeira ocorrência de uma determinada substring.

Leva dois argumentos; o primeiro é a fonteStringe o segundo argumento é a substring para corresponder e retornar a primeira ocorrência.

A funçãofn:indexOf() retorna um número inteiro e pode ser usada como:

Index: ${fn:indexOf(string1, "first")}

7.6. A funçãofn:join()

A funçãofn:join() concatena todos os elementos de uma matriz em um únicoString e pode ser usada assim:


7.7. A funçãofn:length()

A funçãofn:length() retorna o número de elementos na coleção fornecida ou o número de caracteres emString. fornecida

A funçãofn:length() pega um únicoObject que pode ser uma coleção ouStringe retorna um número inteiro como este:

Length: ${fn:length(string1)}

7.8. A funçãofn:replace()

A funçãofn:replace() substitui todas as ocorrências de uma substring em uma String por outroString.

Leva três argumentos; a fonteString, a substring para pesquisar na fonte e oString para substituir todas as ocorrências da substring assim:

7.9. A funçãofn:split()

A funçãofn:split() executa a operação de divisão em umString usando o delimitador especificado. Aqui está um exemplo de uso:

7.10. A funçãofn:startsWith()

A funçãofn:startsWith() verifica o prefixo deString e retorna verdadeiro se corresponder a uma determinada substring como esta:


    

String starts with 'This'

7.11. A funçãofn:substring()

A funçãofn:substring() cria uma substring de uma fonteString nos índices inicial e final especificados. Nós o usaríamos assim:

7.12. A funçãofn:substringAfter()

A funçãofn:substringAfter() verifica uma fonteString para uma determinada substring e retornaString imediatamente após a primeira ocorrência da substring especificada.

Nós o usaríamos assim:

7.13. A funçãofn:substringBefore()

A funçãofn:substringBefore() verifica uma fonteString para uma determinada substring e retornaString logo antes da primeira ocorrência da substring especificada.

Em nossa página JSP, terá a seguinte aparência:

7.14. A funçãofn:toLowerCase()

A funçãofn:to LowerCase() transforma todos os caracteres emString em minúsculas e pode ser usada assim:

7.15. A funçãofn:toUpperCase()

A funçãofn:toUpperCase() transforma todos os caracteres deString em maiúsculas:

7.16. A funçãofn:trim()

A funçãofn:trim() remove os espaços em branco anteriores e posteriores em umString:

9. Conclusão

Neste extenso artigo, vimos as várias tags JSTL e como usá-las.

Como de costume, trechos de código podem ser encontradosover on GitHub.