JSP JSTL
JSP Standard Tag Library (JSTL) Esforço de padronização do JCP: JSR-152 Baseado no Jakarta Taglibs (porém bem menor) Oferece dois recursos 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 WEB- INF/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 Atributo: Único que não é mapeamento (Map); é um bean 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 Deve seguir regras normais do Java para nomenclatura dos identificadores Operador [] é similar ao ponto, mas melhor ${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