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