c:forEach

Propaganda
JSP – JSTL
JSP Standard Tag Library (JSTL)

Esforço de padronização do JCP: JSR-152


Oferece dois recursos



Baseado no Jakarta Taglibs (porém bem menor)
Conjunto padrão de tags básicos (Core, XML, banco de dados e
internacionalização)
Linguagem de expressões do JSP 1.3
Oferece mais controle ao autor de páginas sem necessariamente
aumentar a complexidade



Controle sobre dados sem precisar escrever scripts
Estimula a separação da apresentação e lógica
Estimula o investimento em soluções MVC
Como usar JSTL



1. Fazer o download da última versão do site da Sun
2. Copiar os JARs das bibliotecas desejadas para o diretório WEBINF/lib/ da sua aplicação Web
3. Incluir em cada página que usa os tags:
<%@ taglib uri="uri_da_taglib"
prefix="prefixo" %>

4. Usar os tags da biblioteca com o prefixo definido no passo
anterior
<prefixo:nomeTag atributo="..."> ...
</prefixo:nomeTag>
Cinco bibliotecas de tags

Core library: tags para condicionais, iterações, urls, ...
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Exemplo: <c:if test="..." ... >...</c:if>

XML library: tags para processamento XML
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

Exemplo: <x:parse>...</x:parse>

Internationalization library
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

Exemplo: <fmt:message key="..." />

SQL library
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

Exemplo: <sql:update>...</sql:update>

Function library
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

Exemplo: ${fn:length(...)}
Linguagem de expressões (EL)

Permite embutir em atributos expressões dentro de delimitadores
${...}




Em vez de request.getAttribute("nome")
${nome}
Em vez de bean.getPessoa().getNome()
${bean.pessoa.nome}
Suporta operadores aritméticos, relacionais e binários
Converte tipos automaticamente
<tag item="${request.valorNumerico}" />

Valores default
<tag value="${abc.def}" default="todos" />
Linguagem de expressões (EL)

A primeira variável na expressão é um OBJETO IMPLÍCITO ou um
ATRIBUTO


$ { primeiro.segundo)
Objetos:






pageScope, requestScope, sessioScope,applicationScope
param, paramValues
header, headerValues
cookie
initParam
pageConext


Único que não é mapeamento (Map); é um bean
Atributo:

Em qualquer um dos escopos: page, request, session, application
Linguagem de expressões (EL)


Se a expressão possuir um avariável seguida por um ponto, a variável a
esquerda TEM QUE ser um MAP ou um BEAN
O que estiver do lado direito do ponto TEM QUE ser uma chave de MAP ou uma
propriedade do BEAN


Operador [] é similar ao ponto, mas melhor


Deve seguir regras normais do Java para nomenclatura dos identificadores
${pessoa[“nome“]} idem a ${pessoa.nome}
Se pessoa for List ou Array?


Só funciona com [] : ${listMusic[“Take“] } ou ${listMusic[0]}
O que vem dentro dos colchetes é uma String:



Chave Map
Propriedade Bean
Índice de um List ou Array
Principais ações

Suporte à impressão da linguagem expressões


<c:out value="${pessoa.nome}" />
Expressões condicionais

<c:if test="${pessoa.idade >= 18}">
<a href="adultos.html">Entrar</a>
</c:if>

<c:choose>
<c:when test="${dia.hora == 13}">
<c:out value="${mensagemEspecial}" />
</c:when>
<c:otherwise>
<c:out value="${mensagemPadrao}" />
</c:otherwise>
</c:choose>

Iteração

<c:forEach items="${pessoas}" var="p" varStatus="s">
<c:out value="${s.count}"/>. <c:out value="${p}"/>
</c:forEach>
PageContext

Objeto que permite a tag acessar informações
sobre o contexto da aplicação para leitura de
valores de formularios (request), variaveis de
sessao e gerar conteudo de saida (response)
PageContext





Acesso facil a parametros de entrada vindos de
get/post, variaveis de sessoes e cookies
$session:minhavariaveldesessao
$cookie:meucookie
$param:email
$param:nome
Dados vindos de
forms
set

Atribui valor a uma variável









Sintaxe 1
<c:set value="valor"
var=”nomeVariavel”
[scope=”{page|request|session|application}”] />
Sintaxe 2
<c:set var=” nomeVariavel”
[scope=”{page|request|session|application}”]>
Corpo do Conteúdo
</c:set>
Exemplo







<c:set var="nome"
value="${param.nome}" />
Olá ${nome}
<c:set var="nome">
${param.nome}
</c:set>
Olá ${nome}
remove

Remove uma variável



<c:remove var="nomeVar" [scope="{page|...}"]/>
Se o escopo for omitido a variável é removida do
escopo mais interno
Exemplo

<c:remove var="nome"
scope="page" />
out







Avalia e exibe uma expressão
Sintaxe
<c:out value="valor”
[escapeXml="{true|false}"]
[default="valorDefault"] />
Exemplo
Olá <c:out value="${nome}" />
if








Avalia o conteúdo se a condição for verdadeira
<c:if test="condição">
Conteúdo
</c:if>
Exemplo
<c:if test="${usuario.visitas eq 1}">
Esta é a sua Primeira Visita.
</c:if>
choose ... when ... otherwise

Avalia várias condições

semelhante a um if aninhado de Java
<c:choose>
<c:when test="condição">
</c:when>
...
<c:otherwise>
</c:otherwise>
</c:choose>
Exemplo
Situação Parcial:
<c:choose>
<c:when test="${nota lt 30}">
Reprovado
</c:when>
<c:when test="${nota lt 70}">
Recuperação
</c:when>
<c:otherwise>
Aprovado
</c:othewise>
</c:choose>

Exemplo : choose = if ... else
Situação Final:
<c:choose>
<c:when test="${nota lt 70}">
Reprovado
</c:when>

<c:otherwise>
Aprovado
</c:otherwise>
</c:choose>
forEach (1/2)
Percorre uma coleção (lista, array ou
mapeamento) de objetos
<c:forEach var=“variavel” itens=“colecao”
varStatus=“variavelStatus” />
conteúdo
</c:forEach>

Exemplo forEach
Exemplo:
<c:forEach var=“livro” itens=“${livros}”
varStatus=“status” />
${status.count} – ${livro.titulo}
</c:forEach>

1 - Java Como Programar
2 - Java Servlets
3 - HTML & XHTML
forEach (2/2)
Laço com início e fim
<c:forEach var=“variavel” begin=“inicio” end=“fim”
step=“passo” varStatus=“variavelStatus” />
conteúdo
</c:forEach>

Construindo uma Tabela
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Função Quadrado</title></head>
<body>
<table border="1">
<tr><th>x</th><th>x^2</th></tr>
<c:forEach var="counter" begin="1" end="10">
<tr>
<td>${counter}</td>
<td>${counter*counter}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
forTokens
Semelhante ao forEach mas os elementos estão
em um único String.
<c:forTokens items="stringOfTokens"
delims="delimitadores" [var=“nomeVar"]
[varStatus=“nomeVarStatus"]
[begin=“inicio"] [end=“fim"] [step=“passo"]>
Conteúdo
</c:forTokens>

Exemplo

Imprimir as letras do string "a,b/c,d/e,f" onde , e /
são delimitadores
<c:forTokens items="a,b/c,d/e,f" delims=",/"
var=“letra">
<p>${letra}</p>
</c:forTokens>
Exercícios

Use os tags de lógica <if> e <forEach> para
remover as expressões condicionais e
iterações das páginas da aplicação de
mensagens
Download