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 &gt;= 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