Cursos / Informática para Internet / Desenvolvimento Web I / Aula

arrow_back Aula 07 - Introdução ao JSTL

tag de loop

As funcionalidades de controle de fluxo da taglib core compreendem as tags de loop e de testes condicionais. Começaremos falando da tag de loop e concluiremos a taglib core mostrando as tags condicionais.

Para controlar loops dentro do JSP, a taglib core usa a tag c:forEach. Ela é responsável por fornecer uma maneira simples de iterar em coleções (arrays, listas, mapas etc.) ou de iterar um número definido de vezes. Tudo que estiver dentro do corpo dessa tag será repetido enquanto houver elementos na coleção ou o limite de vezes ainda não foi atingido.

Já vimos nos exemplos anteriores o uso dessa tag quando iteramos por uma coleção de filmes e pessoas exibindo seus nomes. Agora, vamos entender com mais detalhes o funcionamento da tag usando como exemplo a Listagem 8.

Listagem 8 - Uso da tag c:forEach

No exemplo acima, a lista de filmes é um array de strings. Na linha 06, estamos dizendo que todo código dentro da tag c:forEach (linhas 07 a 09) será repetido enquanto houver elementos no array de filmes. O atributo items pode receber tanto uma expressão, como no caso acima, como uma lista de textos separados por vírgulas:

<c:forEach var="filme" items="A volta dos que não foram, A mordida do banguelo, Um cavalo morto é um animal sem vida" >.

No exemplo visto anteriormente (Figura 1) vimos que ${filmes} é um array que foi definido como um atributo da requisição dentro do nosso servlet de exemplo. O atributo var define o nome da variável onde cada elemento da iteração será armazenado.

Uma vez que explicamos a funcionalidade dessa tag, vamos, agora, mostrar e explicar cada um dos seus atributos.

Atributo Descrição Obrigatório Valor default
begin Índice do primeiro item a ser processado. Inicia em zero. Não 0
end Índice do último item a ser processado. Não Último item
step Processa cada enésimo elemento. Por exemplo, se step for dois, processa o segundo, quarto, sexto e assim por diante. Não 1
var Nome da variável onde o elemento corrente da iteração será armazenado. Só existe durante a execução do loop. Não
items Coleção, Iterador, Mapa ou Array para ser iterador. Não
varStatus Nome da propriedade que armazenará o status do loop. Esse objeto que representa o status possui quatro atributos:
  • Índex – posição do item corrente.
  • Count – número de vezes que o loop foi executado (começa em 1).
  • First – booleano que indica se é a primeira iteração.
  • Last – booleano que indica se é a última iteração
Não
Quadro 10 - Atributos da tag c:forEach

O funcionamento básico da tag c:forEach já foi explicado. Agora, mostraremos o que cada atributo representa para a tag.

O atributo begin informa à tag qual deve ser o índice que o loop iniciará a iteração. Esse atributo tem uma semântica bastante similar à variável de controle de um loop for da linguagem Java. Em um loop for Java, temos a seguinte construção for (int i = 0; i < 10; i++). Se definirmos o atributo begin como 5, por exemplo, é como se tivéssemos definindo a variável i do loop Java como 5. De forma análoga funciona o atributo end. Nesse caso, a sua analogia é com a constante 10 do loop Java. O atributo step, por analogia, seria a condição de incremento do loop Java, ou seja, o i++. Para finalizarmos, da mesma forma que a variável i só existe dentro do contexto do loop, a variável que representa o valor corrente da iteração (indicada pelo atributo var) só pode ser usada dentro da tag c:forEach. Na Listagem 9, temos um exemplo correto na linha 01 da variável filme e um exemplo incorreto de uso na linha 02, que tenta usar a variável fora de seu escopo.

Listagem 9 - Uso indevido da variável filme fora da tag c:forEach

O atributo itens pode ser uma expressão que avalia para uma coleção, mapa, iterador, array ou uma string separada por vírgulas, como já dito anteriormente.

Por último, e não menos importante, temos o atributo varStatus. Esse atributo, quando definido, coloca, no escopo da página durante a execução do loop, um objeto que possui atributos que auxiliam no controle do loop. No exemplo visto anteriormente, usamos esse atributo para definir o atributo id do objeto pessoa, como mostrado no exemplo abaixo.

Exemplo de código utilizando o atributo varStatus

Versão 5.3 - Todos os Direitos reservados