AULA 12 JSTL Prof. André Luis Schwerz andreluis@utfpr.edu.br andreschwerz@gmail.com
Aprenderemos: Objetivos da Aula
Motivação Falta de padrão no desenvolvimento JSP Scriptlets espalhados em vários páginas Código confuso = manutenção +trabalhosa Regras de negócio não deveriam ser tratadas dentro do JSP (foge ao padrão MVC) JSP deve ser usado somente para a camada de visualização (viewer), somente exibindo o conteúdo dos objetos e nada de scriptlets. Tag Libs Biblioteca de Tags Estende a semântica das páginas jsp Tags personalizadas Facilita o entendimento de páginas jsp
JSTL - JSP Standard Tag Library Conjunto de marcações (tags) que encapsulam funcionalidades comuns a muitas aplicações JSP: Linguagem de Expressão Simplifica o processo de criação de páginas Redução ou supressão do uso de scriptlets Melhoria na legibilidade;
Divisão em cinco taglibs: Estrutura da JSTL Core: saída, repetição, decisão e seleção http://java.sun.com/jsp/jstl/core Database: acesso a BD http://java.sun.com/jsp/jstl/sql Formatting e I18N: formatação e internacionalização http://java.sun.com/jsp/jstl/fmt XML Processing: processamento de documentos XML http://java.sun.com/jsp/jstl/xml Funções Diversas http://java.sun.com/jsp/jstl/functions
Inclusão de Taglibs Formato: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="xml" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
Área Core XML Internacionalização Banco de Dados Funções SQL Tags JSTL Sub-Função Suporte a Variáveis Controle de Fluxo Gerenciamento de URL Core Controle de Fluxo Transformação Local Formatação de Mensagem Formatação de Datas e Números Tamanho de Coleções Manipulação de Strings Prefixo c x fmt sql fn
Biblioteca JSTL CORE
Definição: Tag out Imprime o valor de uma expressão. Atributos: Nome value default escapexml Obrigatório True Expressão avaliada. Descrição Valor padrão se o valor resultante é null. Determina se os caracteres <,>,&,'," na string resultante devem ser convertido para código. Valor padrão é true. Corpo da tag: Atributo default
Exemplos out <c:out value="${umaexpressao}"/> <c:out value="texto${umaexpressao}${outraexpressao}"/> <c:out value="texto"/> <c:out value="${pessoa.nome}" /> <c:out escapexml="true" value="<html>" /> <c:out value="${a}" default="nulo" /> <c:out value="${a}"> Nulo</c:out>
Definição: Tag if Executa o corpo da tag apenas se a expressão de teste for verdadeira. Atributos: Nome test var Scope Obrigatório True Indica a condição a ser avaliada. Nome da variável de escopo exportada para o valor resultante do teste de condicional. O tipo da variável de escopo é Boolean. Escopo de var. Descrição Corpo da tag: Bloco a ser executado se a expressão teste for verdadeira.
Exemplo if <c:if test= ${usuario.nome == 'Felipe' usuario.nome == 'Michael'} > Permissão ok!<br> </c:if> <c:if test= ${usuario.nome == 'Felipe'} var= acesso > Permissão ok!<br> </c:if> Acesso: <c:out value= ${acesso} />
Definição: Tag choose Tag condicional que estabelece um contexto para operações condicionais mutuamente exclusivas, definidas por <when> e <otherwise>. Atributos: Não há atributos. Corpo da Tag: Tags <when> (1 ou +) e <otherwise> (0-1)
Definição: Tag when Inclui o que for definido em seu corpo se sua condição for avaliada como verdadeira. Atributos: Nome test Obrigatório True Descrição Testa a condição indicando se o corpo será ou não incluido. Corpo da Tag: Bloco a ser executado quando condição teste for verdadeira
Definição: Tag otherwise Subtag da tag <choose> que acompanha as tags <when> e executa somente se todas as condições anteriores forem avaliadas como false. Atributos: Não há atributos. Corpo da Tag: Bloco a ser executado quando condição teste for verdadeira.
Exemplo <c:choose> <c:when test= ${usuario.nome == 'Felipe'} > Permissão ok!<br/> </c:when> <c:when test= ${usuario.nome == 'Michael'} > Permissão ok!<br/> </c:when> <c:otherwise> Permissão negada!<br/> </c:otherwise> </c:choose>
<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
Definição: Tag foreach Tag de interação. Aceita diferentes tipos de coleções. Atributos: Nome items begin end step var varstatus Obrigatório Descrição Coleção a ser iterada. Índice do primeiro passo da iteração. Índice do último passo da iteração. Frequencia das iterações. Variável que recebe o valor de cada iteração. Variável que recebe o status de cada iteração. Corpo da Tag: Bloco a ser executado em cada iteração.
Exemplo foreach <table border="1" cellspacing="0" cellpadding="0"> <c:foreach items="${listapessoa}" var="pessoa" varstatus="status"> <tr> <td><c:out value="${status.count}" /></td> <td><c:out value="${parametro.nome}" /></td> <td><c:out value="${parametro.sobrenome}" /></td> </tr> </c:foreach> </table> <ul> <c:foreach var="i" begin="1" end="10"> <li><c:out value="${i}"/> </li> </c:foreach> </ul>
Definição: Tag fortokens Iteração sobre os tokens de uma string. Atributos: Nome items delims begin end step var varstatus Obrigatório True Descrição String com os tokens. Delimitadores dos tokens. Índice do primeiro passo para iteração. Índice do último passo para iteração. Frequencia das iterações. Variável que recebe o valor de cada iteração. Variável que recebe o status de cada iteração. Corpo da Tag: Bloco a ser executado em cada iteração.
Exemplo fortokens <table> <c:fortokens items="a,b;c,d,e,f;g;h" delims=",;" var="token" varstatus="status"> <tr> <td><c:out value="${status.count}"/></td> <td><c:out value="${token}"/></td> </tr> </c:fortokens> </table>
Resumo out if choose when otherwise foreach fortokens Mesmo que <%=... >, mas para expressões. Avalia o corpo da tag se a condição for verdadeira. Tag condicional que estabelece um contexto operações condicionais mutuamente exclusivas, definidas nas tag <when> e <otherwise>. Subtag de <choose> que inclui seu corpo se sua condição for verdadeira. Subtag de <choose> que acompanha as tags <when> e executa somente se todas as condições anteriores forem falsas. Tag de iteração básica, aceita uma grande quantidade de tipos de coleções e suporta subsetting e outras funcionalidade. Iteração sobre tokens, separados pelos delimitadores fornecidos.
Definição: Tag set Define o valor de uma variável ou propriedade de um objeto. Atributos: Nome var value target property Scope Obrigatório Descrição Nome da variável Valor a ser atribuído na variável. Objeto alvo. Propriedade do objeto alvo. Escopo da variável (page, request, session ou application). Corpo da Tag: Atributo value
Exemplo set <c:set var="nome" value="andre"/><br> Variável nome: <c:out value="${nome}"/><br> <c:set target="${usuario}" property="nome" value="${nome}"/> Propriedade nome do objeto usuário: <c:out value="${usuario.nome}"/><br>
Definição: Tag remove Remove uma variável de escopo. Atributos: Nome var scope Obrigatório True Descrição Nome da variável a ser removida. Escopo da variável (page, request, session ou application). Corpo da Tag: Não utilizado.
Exemplo remove Antes da remoção: <c:out value="${nome}"/><br> <c:remove var="nome"/> <c:out value="${nome}" escapexml="false"> Variável <i>nome</i> foi removida do escopo! </c:out>
Definição: Tag catch Captura uma exceção ocorrida no corpo da tag. Atributos: Nome var Obrigatório Descrição variável, de escopo de página (page), que receberá a exceção. Caso não seja definida, a exceção será ignorada. Corpo da Tag: Bloco (html/jsp/tags) cujas exceções serão capturadas pela tag.
Exemplo catch <%-- O seguinte trecho gera exceção, já que a propriedade NOME não existe na classe usuario --%> <c:catch var="excecao"> <c:set target="${usuario}" property="nome" value="${nome}"/> </c:catch> Exceção: <c:out value="${excecao}">nenhuma</c:out> <br/>
Definição: Tag url Cria uma string representando uma url Atributos: Nome var scope value context Obrigatório false false false false Variável que recebe a url. Caso omitido, url será impressa na página. Escopo da variável. Valor da url (relativa ou absoluta). Contexto da url Descrição Corpo da Tag: Tags <c:param> (opcionais).
Definição: Tag param Cria uma string representando uma url. Atributos: Nome Name Value Obrigatório True Nome do parâmetro. Valor do parâmetro. Descrição Corpo da Tag: Atributo value
Exemplo url / param URL direto na página: <c:url value="hello.jsp"/> URL com parâmetros atribuída a uma variável: <c:url value="/hello.jsp" var="url"> <c:param name="nome" value="andre"/> <c:param name="sobrenome" value="schwerz"/> </c:url> <c:out value="${url}"/>
Definição: Tag redirect Redireciona o cliente para outra URL. Atributos: Nome url context Obrigatório URL a ser redirecionada. Contexto da URL redirecionada. Descrição Corpo da Tag: Tags <c:param> (opcionais).
Exemplo redirect <c:redirect url="http://www.justjava.com.br"/> <c:redirect url="/showuser.jsp"> <c:param name="user" value="felipeal"/> </c:redirect>
Definição: Tag import Importa o conteúdo de uma url. Atributos: Nome var scope context url varreader charencoding Obrigatório false false false true false false Escopo da variável. Contexto da url Descrição Variável que recebe a url. Caso omitido, url será impressa na página. Url do recurso a ser importado. variável do tipo java.io.reader que receberá a URL código de caracteres (opcional) do recurso da URL Corpo da Tag: Tags <c:param> (opcionais).
Biblioteca JSTL FMT
FMT Sintaxe padrão <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
Tag <fmt fmt:formatnumber formatnumber> Definição: Formata um valor numérico de acordo com as preferências de localização do usuário ou de forma customizada com número, moeda e porcentagem. Atributos: Nome value type pattern currencycode currencysymbol groupingused maxintegerdigits minintegerdigits maxfractiondigits minfractiondigits var scope Obrig. Valor a ser formatado. Number Currency Percent Padrão de formatação. Código ISO da moeda. Símbolo da moeda. Indica se a saída conterá separadores decimais, de milhar, etc. Dígitos máximos da parte inteira da saída. Dígitos mínimos da parte inteira da saída. Dígitos máximos da parte fracionária da saída. Dígitos mínimos da parte fracionária da saída. Variável que conterá a saída. Escopo da variável Descrição
Exemplo <fmt fmt:formatnumber formatnumber> <fmt:formatnumber type="currency" value="999.999" /> <fmt:formatnumber type="number" value="999.999" /> <fmt:formatnumber type="percent" value="0.10" /> <fmt:formatnumber type="number" pattern="000.000" value="99.99" /> <fmt:formatnumber type="number" pattern="##0.000" value="99.99" /> <fmt:formatnumber type="number" pattern="#,#00.0#" value="2999" /> <fmt:formatnumber type="number" maxfractiondigits="2" value="999.999"/> <fmt:formatnumber type="number" maxintegerdigits="2" value="899.999"/> R$ 1.000,00 999,999 10% 099,990 99,990 1.000 99,999
Definição: Analisa a representação de número, moeda ou porcentagem. Atributos: Nome value type pattern parselocale integeronly var scope Obrigatório Corpo da Tag: Atributo value Tag <fmt fmt:parsenumber parsenumber> String a ser analisada number currency percent Padrão de formatação. Identifica locale para o analisador. Especifica que somente a porção inteira deve ser analisada. Variável que conterá a saída. Escopo da variável. Descrição
Exemplo <fmt fmt:parsenumber parsenumber> <c:set var="reais" value="r$ 5,00" /> <fmt:parsenumber value="${reais}" type="currency" parselocale="pt_br" />
Definição: Formata data/hora Atributos: Tag <fmt fmt:formatdate formatdate> Nome Value Type datastyle timestyle Pattern timezone var scope Obrigatório True Descrição Valor a ser formatado Date Time Both Formatação da data: default short meddium long full Formatação da hora: default short meddium long full Padrão de formatação customizado TimeZone da data/hora a ser formatado. Variável que conterá a saída Escopo da variável. Corpo da Tag: Não há corpo.
Exemplo <fmt fmt:formatdate formatdate> <jsp:usebean id="data" class="java.util.date" /> <fmt:formatdate type="date" value="${data}"/> <fmt:formatdate type="time" value="${data}"/> <fmt:formatdate type="both" value="${data}"/> <fmt:formatdate type="date" datestyle="default" value="${data}"/> <fmt:formatdate type="date" datestyle="short" value="${data}"/> <fmt:formatdate type="date" datestyle="medium" value="${data}"/> <fmt:formatdate type="date" datestyle="long" value="${data}"/> <fmt:formatdate type="date" datestyle="full" value="${data}"/> <fmt:formatdate type="time" timestyle="default" value="${data}"/> <fmt:formatdate type="time" timestyle="short" value="${data}"/> <fmt:formatdate type="time" timestyle="medium" value="${data}"/> <fmt:formatdate type="time" timestyle="long" value="${data}"/> <fmt:formatdate type="time" timestyle="full" value="${data}"/> 29/11/2009 16:48:27 29/11/2009 16:48:27 29/11/2009 29/11/09 29/11/2009 29 de Novembro de 2009 Domingo, 29 de Novembro de 2009 16:48:27 16:48 16:48:27 16h48min27s BRST 16h48min27s BRST
Definição: Tag <fmt fmt:parsedate parsedate> Analisa o formato da data/hora de acordo com o padrão. Atributos: Nome Value Type datastyle timestyle Pattern timezone var scope Obrigatório True Corpo da Tag: Não há corpo. Valor a ser formatado Date Time Both Formatação da data: default short meddium long full Formatação da hora: default short meddium long full Padrão de formatação customizado TimeZone da data/hora a ser formatado. Variável que conterá a saída Escopo da variável. Descrição
Definição: Tag <fmt fmt:requestencoding requestencoding> Configura a codificação de caractere da requisição. Atributos: Nome value Obrigatório false Descrição Nome da codificação dos caracteres aplicado aos parâmetros da requisição. Corpo da Tag: Não há corpo.
Definição: Define uma variável locale. Atributos: Tag <fmt fmt:setlocale setlocale> Nome value variant scope Obrigatório True Descrição Exemplo: pt_br en_us pt_pt Ver ISO-639 e ISO-3166??? Escopo do Locale. Corpo da Tag: Não há corpo.
Exemplo <fmt fmt:setlocale setlocale> <fmt:setlocale value="en_us"/> <fmt:formatnumber value="9876543.99" type="currency"/><br /> <fmt:setlocale value="pt_br"/> <fmt:formatnumber value="9876543.99" type="currency"/><br /> <fmt:setlocale value="pt_pt"/> <fmt:formatnumber value="9876543.99" type="currency"/><br />
Definição: Tag <fmt fmt:timezone timezone> Especifica um fuso horário para o corpo da página. Atributos: Nome Value Obrigatório True Descrição O valor do fuso horário. Uma string é interpretada como um ID. Pode ser um ID suportado pela plataforma Java, (tal como "America/Los_Angeles") ou um ID personalizado (tal como "GMT- 8"). Corpo da Tag: Tags <fmt:formatdate>
Definição: Tag <fmt fmt:settimezone settimezone> Configura o fuso horário em uma variável de configuração. Atributos: Nome value var Obrigatório True Descrição O valor do fuso horário. Uma string é interpretada como um ID. Pode ser um ID suportado pela plataforma Java, (tal como "America/Los_Angeles") ou um ID personalizado (tal como "GMT- 8"). Nome da variável de escopo que armazenará o fuso horáriodo tipo java.util.timezone. scope Corpo da Tag: Não há corpo. Escopo da variável ou do fuso horário especificado.
Exemplo <jsp:usebean id="currentdate" class="java.util.date" /> <fmt:timezone value="gmt+7:00"> <fmt:formatdate value="${currentdate}" type="both" datestyle="full" timestyle="full"/> </fmt:timezone> <br/> <hr/> <fmt:settimezone value="gmt-10:00" var="timezone" scope="page"/> <fmt:timezone value="${timezone}"> <fmt:formatdate value="${currentdate}" type="both" datestyle="full" timestyle="full"/> </fmt:timezone>
Definição: Tag <fmt fmt:bundle bundle> Carrega um resource bundle usado no corpo da página. Atributos: Nome basename prefix Obrigatório true false Descrição Nome base do resource bundle. Este é o nome base do resource que pode ter sufixo tais com.class e.properties O prefixo para o valor da chave da mensagem de qualquer ação <fmt:message>. Corpo da Tag: Tags <fmt:message>
Definição: Tag <fmt fmt:setbundle setbundle> Carrega um resource bundle e o armazena em uma variável. Atributos: Nome Obrigatório Basename true var Scope Nome base do resource bundle. Este é o nome base do resource que pode ter sufixo tais com.class e.properties Nome da variável de escopo que armazena o resource bundle. Escopo da variável. Descrição Corpo da Tag: Não há corpo.
Definição: Tag <fmt fmt:message message> Chave dos mapas para localização de mensagens e execução de substituição de parâmetros. Atributos: Nome key bundle var scope Obrigatório false false false false Descrição Chave da mensagem que será buscada. Resource bundle em que a mensagem será procurada. Variável que armazena a mensagem. Escopo da variável. Corpo da Tag: Tags <fmt:param>
Exemplo <fmt:bundle basename="labels"> Hello: <fmt:message key="hello" /> GoodBye: <fmt:message key="goodbye" /> </fmt:bundle> hello=olá goodbye=até mais <fmt:bundle basename="file_en" prefix="cliente."> Primeiro Nome: <fmt:message key="primeironome" /><br/> Último Nome: <fmt:message key="ultimonome" /><br/> </fmt:bundle> cliente.primeironome=first Name cliente.ultimonome=last Name cliente.endereco=address
Definição: Tag <fmt fmt:param> Fornece um argumento que será substituído na mensagem. Atributos: Nome Value Obrigatório True Descrição Argumento usado para ser substituído. Corpo da Tag: Atributo value
Exemplo <fmt:bundle basename="file_en" prefix="cliente."> Primeiro Nome: <fmt:message key="primeironome" /><br/> Último Nome: <fmt:message key="ultimonome" /><br/> <fmt:message key="saudacao"> <fmt:param value="andré" /> </fmt:message> </fmt:bundle> cliente.primeironome=first Name cliente.ultimonome=last Name cliente.endereco=address cliente.saudacao=olá Sr.{0}
Resumo Tags requestencoding setlocale timezone settimezone bundle setbundle message param formatnumber parsenumber formatdate parsedate Descrição Configura a codificação dos caracteres da requisição. Armazena um locale na variável de configuração locale. Especifica o fuso horário para o corpo da página. Configura a variável de fuso horário. Carrega um resource bundle para o corpo da página. Carrega um resource bundle e armazena na sua variável de configuração. Exibe uma mensagem baseado em sua chave. Fornece um argumento que será substituído na mensagem. Formata um valor numérico como um número, moeda ou porcentagem. Analisa a representação de um número, moeda ou porcentagem. Formata a data e/ou hora usando um padrão e estilo especificados. Analisa a representação de uma data e/ou hora.