• Nenhum resultado encontrado

Linguagem de Expressão, JSTL e DisplayTag. Fornece tags para encapsular funcionalidades complexas para utilização em JSPs

N/A
N/A
Protected

Academic year: 2021

Share "Linguagem de Expressão, JSTL e DisplayTag. Fornece tags para encapsular funcionalidades complexas para utilização em JSPs"

Copied!
55
0
0

Texto

(1)

Linguagem de Expressão, JSTL

e DisplayTag

Linguagem de Expressão, JSTL

e DisplayTag

Fornece tags para encapsular funcionalidades complexas para utilização em JSPs

(2)

Motivação p/ utilização de Tags Customizadas

Motivação p/ utilização de Tags Customizadas

Facilita o desenvolvimento de futuras páginas JSP e

permite o reuso de código

Pois, páginas com excesso de scriptlets dificultam a sua leitura, manutenção e expansão

Facilitam a divisão de tarefas

Possuem sintaxe similar a linguagem XML Podem substituir scriptlets e JavaBeans

(3)

Características

Características

Pode ser parametrizada com a utilização de atributos

Pode acessar todos os objetos disponíveis em uma página JSP

Pode modificar a resposta da página que a chamou Você pode criar e iniciar componentes JavaBeans

(4)

Como Utilizar as Taglibs

(5)

Tipos de Tag

Tipos de Tag

São expressas utilizando sintaxe XML

Uma tag sem corpo pode ser expressa da seguinte maneira

<tlt:tag> body </tlt:tag>

(6)

Importando uma biblioteca de tags

Importando uma biblioteca de tags

Utilize a diretiva taglib

<%@ taglib uri=”” prefix=”” %>

uri –especifica a localização do TLD (Tag Lib

Descriptor)

prefix – é uma string que é utilizada unicamente

para identificar as tags personalizadas que vc deseja utilizar

(7)

TLD (Tag Lib Descriptor)

TLD (Tag Lib Descriptor)

É um arquivo XML que descreve o mapeamento entre as tags Há duas maneiras básicas de especificar esse mapeamento. URL relativo

<%@ taglib uri=”/WEB-INF/c.tld” prefix=”c” %>

URL absoluto <%@ taglib uri=”http://java.sun.com/jstl/core” prefix=”c” %> <?xml version="1.0" ?> ... <taglib> <tlib-version>1.0</tlib-version> ... <uri>http://java.sun.com/jstl/core</uri> ... </taglib>

A página tem que usar exatamente esta URI)

(8)

JSTL

(JSP Standard Tag Libraries)

JSTL

(9)

Visão Geral do JSTL

Visão Geral do JSTL

Linguagem de Expressão (EL) Biblioteca de Tags

Core Format SQL

(10)

Linguagem de Expressão

Linguagem de Expressão

Permite embutir em atributos expressões dentro de delimitadores ${...} facilitando o acesso a

atributos, propriedades e métodos. Exemplos

<%=((Usuario)request.getAttribute("usuario")).

getGrupo().getNome()%>

Corresponde a: ${usuario.grupo.nome}

<jsp:getProperty name=“usuario” property=“nome” />

(11)

Resolução de Identificadores

Resolução de Identificadores

A EL transforma identificadores em objetos fazendo uma chamada ao método

PageContext.findAttribute(String id) que

procura o atributo id nos quatros escopos JSP: page, request, session e application,

respectivamente, e retorna um objeto associado ao identificador ou null, caso não seja encontrado

(12)

Objetos implícitos fornecidos pelas EL

Objetos implícitos fornecidos pelas EL

Além de acesso a JavaBean, a EL também facilitam a leitura de

parâmetros de requisição, cabeçalhos HTTP, cookies e parâmetros de inicialização

Os objetos implícitos têm precedência sobre as variáveis (objetos) de escopo

param: acessa parâmetros de request. Exemplo campo login de

um formulário:

<%= request.getParameter("login") %>

${param.login} ou ${param[login‘]}

paramValues: quando o parâmetro tiver múltiplos valores. Ex: ${paramValues[perfies‘][0]}

(13)

Objetos implícitos fornecidos pelas EL

Objetos implícitos fornecidos pelas EL

initParam: parametros de inicialização fornecidos

no arquivo web.xml Ex: ${initParam.localizacao} equivale a: pageContext.getServletContext(). getInitParameter(“localizacao”) <?xml version="1.0" encoding="UTF-8"?> <web-app ...> <context-param>

<param-name>localizacao</param-name> <param-value>pt_BR</param-value>

</context-param> . . .

(14)

Objetos implícitos fornecidos pelas EL

Objetos implícitos fornecidos pelas EL

header : acessa os atributos do cabeçalho HTTP. headerValues: para cabeçalhos de múltiplos

valores

Ex: ${header.host} ou ${header[host‘]}

(15)

Objetos implícitos fornecidos pelas EL

Objetos implícitos fornecidos pelas EL

pageContext: Mesmo objeto pageContext do JSP

Exemplo: ${pageContext}

pageScope, requestScope, sessionScope,

applicationScope: acessa objetos em um contexto

específico

Ex: ${requestScope.funcionario} ${sessionScope.funcionario}

cookies: retorna um cookie a partir do seu nome Ex: ${cookie.favorito}

(16)

Operadores

Operadores

A EL fornece operadores aritméticos, lógicos e relacionais

Aritméticos: +, -, *, / (div), % (mod)

Lógicos: && (and), ||(or), !(not), empty

Relacionais: == (eq), != (ne), < (lt), > (gt) <= (le),

>= (ge)

Exemplos: ${10 % 3} produz 1

${-produto.preco} resultado -50

OBS: operador empty determina se um valor é nulo ou vazio. A operação empty obj retorne true caso obj seja null

Também retorna true para: uma string vazia, um array vazio, ou um objeto que implemete Map ou List e esteja vazio

(17)

JSTL

JSTL

(18)

JSTL

JSTL

É uma especificação do JCP (JSR-52) e faz parte do JSP 2.0 e do J2EE 1.4

É composta de quatro taglibs (Core, Format, XML e SQL)

Suporta linguagem de expressão (EL)

Oferece mais controle ao autor de páginas sem necessariamente aumentar a complexidade

Estimula a separação da apresentação e lógica Estimula o investimento em soluções MVC

(19)

Histórico

Histórico

Julho/2001 - Criado o projeto (JSR-052)

Junho/2002 – lançado o JSTL 1.0 baseado no JSP 1.2 (Tomcat4 e maioria dos servidores corporativos)

Janeiro/2004 - lançado o JSTL 1.1 baseado no JSP 2.0 (Tomcat 5)

(20)

JSTL

JSTL

Core (núcleo): Contém tags usadas para controle de fluxo e saída de mensagens

XML: Tags utilitárias para o processamento de XML

Format (Internacionalização): usadas para

formatação de texto, valores monetários e números com base em uma determinada localização

SQL: fornece tags para acesso a banco de maneira simplificada sem a necessidade de código Java

(21)

JSTL - Core

JSTL - Core

<c:out>: avalia uma expressão e exibe o resultado na página

<c:out value="${usuario.nome}"> Usuário Anônimo

</c:out>

Será exibido apenas quando o value for vazio ou null

É equivalente a:

<c:out value="${usuario.nome}"

default="Usuário Anônimo“ />

<c:out value=”” escapeXml=”false”> Usuario <i>anônimo</i>.

</c:out>

Atributo opcional, indica se caracteres

especiais (<, &, ...) devem ser convertidos para entidades XML equivalentes (&lt,

(22)

JSTL - Core

JSTL - Core

<c:set>: define o valor de uma variável de escopo

ou uma propriedade

<c:set var="usuario" scope="page"

value="${sessionScope.usuarioLogado}"/> Valor default

É usado para nome de variáveis de escopo

<c:set target="${usuario}"

property="nome" value="Maria" />

property e value correspondem a nome/valor da propriedade

(23)

JSTL - Core

JSTL - Core

Exemplos:

<c:set var="nome" value="Maria"/>

Variável nome: <c:out value="${nome}"/>

<c:set target="${usuario}" property="nome"

value="${nome}"/>

Propriedade nome do objeto usuário:

(24)

JSTL - Core

JSTL - Core

<c:remove>: remove uma variável de escopo

Não possui corpo Atributos

var – variável a ser removida

scope – escopo (opcional) da variável

<c:remove var="usuario"/>

Antes da remoção: <c:out value="${usuario}"/> <c:remove var="usuario"/>

<c:out value="${usuario}" escapeXml="false">

Variável <i>usuario</i> foi removida do escopo! </c:out>

(25)

JSTL - Core

JSTL - Core

<c:catch>: captura uma exceção ocorrida no corpo da tag

<c:catch var="excecao">

<c:set target="${usuario}" property="NOME" value="Joao" />

</c:catch>

<c:out value="${excecao}" > tudo ok!

(26)

JSTL - Core

JSTL - Core

<c:if>: executa o corpo da tag apenas se uma expressão for verdadeira

<c:if test="${empty sessionScope.usuarioLogado}"> <c:redirect url="login.jsp"/>

(27)

JSTL - Core

JSTL - Core

<c:choose>

<c:when test="${empty usuario.username}"> <b>Campo login é obrigatório!<br>

</c:when>

<c:when test="${empty usuario.senha}"> <b>Campo senha é obrigatório!<br>

</c:when>

<c:when test="${usuario.senha ne usuario.username}"> <b>Senha inválida!<br>

</c:when>

<c:otherwise>

<c:set var="usuarioLogado" scope="session"

value="${usuario}"/>

<c:redirect url="index.jsp"/>

</c:otherwise> </c:choose>

<c:chose>: executa uma tag quando a expressão da subtag for verdadeira

(28)

JSTL - Core

JSTL - Core

forEach - é usada para percorrer uma coleção de objetos ou uma faixa de valores

<c:forEach var="item" items="${colecao}"> ...

<c:out value="${item}" />

</c:forEach>

Opcionalmente, pode-se utilizar os atributos begin

e end (para definir o índice do primeiro) e step

para definir o intervalo da interação

<c:forEach var="i" begin="1" end="10"> <li> ${i}

(29)

JSTL - Core

JSTL - Core

c:param – serve para passar nome e o valor de um

parâmetro. É uma sub-tag das demais tags de manipulação de URL (<c:url>, <c:import> e <c:redirect>)

Atributos

name – nome do parâmetro

(30)

JSTL - Core

JSTL - Core

c:url – cria uma string contendo uma URL c:import – importa o conteúdo de uma URL

c:redirect – redireciona o cliente da aplicação

(31)

JSTL – Core (<c:import>

JSTL – Core (<c:import>

Importa o conteúdo de uma URL

Tem um comportamento semelhante a <jsp:include> e possibilita adicionar recursos localizados fora do container web

O resultado será exibido na tela ou atribuído a uma variável definida pelos atributos opcionais (var e scope) ou a um java.io.Reader (atributo varReader)

Exemplo:

<c:import

(32)

JSTL – Format

JSTL – Format

Fornece suporte:

internacionalização (i18n, internationalization – ‘i‘ + 18 letras + ‘n‘)

Fornece tags para internacionalização de mensagens através de resource bundles

Formatação

Formata números, datas e horas de acordo com a localização (i10n – localization) do usuário

(33)

JSTL – Format

(fmt:formatNumber)

JSTL – Format

(fmt:formatNumber)

Formata um número, valor monetário ou porcentagem, de acordo com as preferências de localização

Atributos

value – valor a ser formatado (pode ser o corpo da tag) type (opcional) – “number” (default), “currency” ou

percent

pattern (opcional) mascara de formatação, de acordo com as regras de java.text.DecimalFormat

currencySymbol (opcional)– símbolo monetário (como R$ ou US$)

(34)

JSTL – Format

(fmt:formatNumber)

JSTL – Format

(

fmt:formatNumber

)

groupingUsed – determina se os dígitos serão agrupados (ex: 5.350 em vez de 5350). A formatação é determinada pelo Locale

maxIntegerDigits/minIntegerDigits – números mínimos e máximos da parte inteira

maxFractionDigits/minFractionDigits – números mínimos e máximos de casas decimais

var – variável (opcional) que conterá a saída scope - (opcional) escopo da variável

(35)

JSTL – Format

(fmt:formatNumber)

JSTL – Format

(

fmt:formatNumber

)

<fmt:formatNumber value="9876543,21" type="currency"/>

<fmt:formatNumber value="12,3" pattern=".000"/>

<fmt:formatNumber value="123456,7891" pattern="#,#00.0#"/>

<fmt:formatNumber value="1234" type="currency“

var=“moeda"/> ${moeda} <fmt:formatNumber minFractionDigits="5“ maxFractionDigits="5"> <%=Math.PI%> </fmt:formatNumber> R$ 1.234.567,89 12,300 123.456,79 R$ 1.234,00 3,14159

(36)

JSTL – Format

<fmt:parseNumber>

JSTL – Format

<fmt:parseNumber>

Obtém um Number a partir de uma String value – valor a ser transformado

integerOnly (opcional) faz o parsing apenas da

parte inteira do número

Outros atributos opcionais: var, scope, type e pattern

Corpo da Tag: atributo value

<c:set var="reais" value="R$ 8,90"/>

<fmt:parseNumber value="${reais}"

type="currency"

(37)

JSTL – Format

<fmt:formatDate>

JSTL – Format

<fmt:formatDate>

Formata uma data e/ou hora de acordo com a Localização ou com parâmetros customizados Atributos:

value: data a ser formatada

Type (opcional): date (default), time ou both

dateStyle ou timeStyle (opcional) : nível de

detalhamento da data/hora

timeZone (opcional): define o fuso-horário

(38)

JSTL – Format

<fmt:formatDate>

JSTL – Format

<fmt:formatDate>

<jsp:useBean id="agora" class="java.util.Date" />

<br>

<fmt:formatDate value="${agora}"

timeStyle="long"

dateStyle="long"/> <br>

(39)

JSTL – Format

<fmt:parseDate>

JSTL – Format

<fmt:parseDate>

Obtém um java.util.Date a partir de uma String Atributos

value: String que será transformada

type: (opcional) date (default), time ou both dateStyle ou timeStyle : (opcional) nível de

detalhamento da data/hora

timeZone: (opcional) define o fuso-horário

parseLocale: Locale usado para personalizar a

transformação

(40)

JSTL – Format

<fmt:parseDate>

JSTL – Format

<fmt:parseDate>

<fmt:parseDate value="13:15" pattern="HH:mm" />

<%-- para o formato americano --%>

<fmt:parseDate value="07/16/2005"

dateStyle="short"

parseLocale="en_US"

var="dataUS" />

<%-- data formatada --%>

<fmt:formatDate value="${dataUS}" dateStyle="full"/>

Thu Jan 01 13:15:00 BRT 1970 Sábado, 16 de Julho de 2005

(41)

Display Tag Library

Display Tag Library

É uma suíte open source de tags customizadas que fornecem uma apresentação web de alto nível para ser usada em aplicações MVC

É possível mostrar tabelas, isto é, listar as

informações de objetos de uma aplicação com diversas funcionalidades:

diferenciação nas cores das linhas, ordenação nas colunas, paginação dos dados, agrupamento de

informações, exportação dos dados, links e decoração customizável

(42)

Exemplo

Exemplo

<%@ taglib uri="/WEB-INF/displaytag-11.tld" prefix="display" %>

...

<% List teste = new ArrayList( 4 ); teste.add( "Teste String 1" ); teste.add( "Teste String 2" ); teste.add( "Teste String 3" ); teste.add( "Teste String 4" );

request.setAttribute("teste", teste); %>

<display:table name="teste" /> Teste String 1Teste String 2

Teste String 3 Teste String 4

(43)

Instalação

Instalação

Deve seguir os seguintes passos:

Colocar o arquivo displaytag.tld no diretório

WEB-INF da aplicação

Colocar o displaytag.jar no WEB-INF/LIB

Adicionar no CLASSPATH da aplicação as seguintes bibliotecas usadas pela DisplayTag:

commons-logging.jar

commons-lang.jar (versão 2.0) commons-collections.jar

commons-beanutils.jar log4j.jar

(44)

<display:table>

<display:table>

Gera um tabela html baseada em uma coleção de objetos Cada item é formatado de acordo com a tag column aninhada dentro dela

<display:table name="listPessoas">

<display:column property="id" title="ID" /> <display:column property="name" />

<display:column property="email" /> <display:column property="status" /> <display:column property="description"

title="Commentários"/>

</display:table>

(45)

Tags table e column

Tags table e column

O valor mostrado será o resultado da propriedade (atributo property) ou de um decorator (se houver um).

<% List produtos = new ListaProdutos();

request.setAttribute("produtos", produtos); %>

<display:table name="produtos">

<display:column property="nome" title="Nome"/>

<display:column property="preco" title="Preço"/>

</display:table> Nome Preço Feijão 2.5 Arroz 4.0 Farinha 3.5 Trigo 5.8 Açucar 1.5

(46)

setProperty

setProperty

Deve ser colocada dentro de uma tag table, serve para setar uma determinada propriedade para a

tabela

Como alternativa pode-se criar um arquivo de propriedades para toda a aplicação

As propriedades e os valores possíveis estão em http://displaytag.sourceforge.net/configuration.html

<display:table name="produtos">

<display:column property="nome"/> <display:column property="preco"/> <display:setProperty Feijão 2.5 Arroz 4.0 Farinha 3.5 Trigo 5.8 Açúcar 1.5

indicamos que a tabela gerada não deve mostrar a linha de título, onde

(47)

footer

footer

Também deve estar dentro da tag table, ela irá fornecer um rodapé customizado para a tabela

<%

ListaProdutos produtos = new ListaProdutos(); request.setAttribute("produtos", produtos); %>

<display:table name="produtos">

<display:column property="nome" title="Nome"/> <display:column property="preco" title="Preço"/> <display:footer> <tr> <td>total:</td> <td><%= produtos.getTotal() %></td> </tr> </display:footer> </display:table>

(48)

Criando objeto implícito na tabela

Criando objeto implícito na tabela

É possível criar um objeto implicitamente na tabela ou no escopo da página usando o atributo 'id'

<display:table name="produtos" id="prod">

<display:column title="Produto" property="nome" />

<display:column title="Preço" property="preco" />

<display:column title="Desconto 10%">

${prod.preco * 0.9} </display:column>

</display:table> Produto Preço Desc. 10%

Feijão 2.5 2.25 Arroz 4.0 3.6 Farinha 3.5 3.15 Trigo 5.8 5.22 Açúcar 1.5 1.35

(49)

Links Dinâmicos

Links Dinâmicos

Para criar links dinâmicos podemos usar duas formas

diferentes. Uma forma é definir as propriedades na tag column e a outra é usando o Decorator

1ª Forma: a tag column tem cinco atributos que podem ser setados para criar o link dinâmico:

href - a URL usada para construir o link

paramID - o nome do parâmetro que será adicionado a URL paramName - nome do bean que contem o dado que será

colocado na URL

paramProperty - a propriedade chamada no objeto que

(50)

Links Dinâmicos

Links Dinâmicos

<display:table name="produtos">

<display:column property="id" href="details.jsp"

paramId="id" paramProperty="id" /> <display:column property="nome" title="Produto" /> <display:column property="preco" title="Preço" /> </display:table>

(51)

Ordenação

(52)

Usando Decorator para transformar dados

Usando Decorator para transformar dados

Um decorator é um design pattern onde um objeto fornece funcionalidades básicas encapsuladas para outros objetos

Ajuda a formatar datas, valores monetários,

(53)

Usando Decorator para transformar dados

Usando Decorator para transformar dados

Para criar uma classe wrapper que atue como um Decorator, 4 pontos devem ser observados:

O wrapper criado deve ser subclasse de TableDecorator

Para aumentar a performance, deve-ser criar os formatters no método construtor

Não é preciso fazer overload de todos os métodos no Decorator, somente daquele que serão formatados. o método getXXX do Decorator sempre será chamado primeiro para uma property, mas se ele não existir, é chamado o método da classe de negócio

(54)

Usando Decorator para transformar dados

Usando Decorator para transformar dados

<display:table name="produtos"> <display:column property="id"

href="details.jsp" paramId="id" paramProperty="id" /> <display:column property="nome" title="Produto" />

<display:column property="preco" title="Preço" /> <display:column property="dataValidade"

title="Validade"

decorator="util.decorator.FormatoDataMedium" /> </display:table>

public class FormatoDataMedium implements ColumnDecorator {

public final String decorate(Object columnValue) {

String retorno = " - ";

Format formataData = DateFormat.getDateInstance(

DateFormat.SHORT); if(columnValue != null){

Date date = (Date) columnValue;

retorno = formataData.format(date); }

(55)

Bibliografia

Bibliografia

SCWCD Exam Study Kit – Java Web Component Developer

Certification. Autores: Hanumant Deshmukh, Jignesh Malavia, Jacquelyn Carter, 2003

Referências

Documentos relacionados

É perceptível, desta forma, o constante aumento do aprofundamento dos personagens: os “príncipes” têm agora não só nome e falas, mas personalidades bem desenvolvidas,

Os resultados demonstraram uma diminuição no teor de ácido ascórbico de 29,72%; um aumento de 51,31% na umidade; o valor do pH permaneceu praticamente inalterado oscilando entre 3,7

A nutrição enteral (NE), segundo o Ministério da Saúde do Brasil, designa todo e qualquer “alimento para fins especiais, com ingestão controlada de nutrientes, na forma isolada

a) Seleciona um par de cromossomos genitores dentro da população atual, com a probabilidade de seleção sendo diretamente proporcional à sua adaptação. O mesmo

No sentido de reverter tal situação, a realização deste trabalho elaborado na disciplina de Prática enquanto Componente Curricular V (PeCC V), buscou proporcionar as

Podem treinar tropas (fornecidas pelo cliente) ou levá-las para combate. Geralmente, organizam-se de forma ad-hoc, que respondem a solicitações de Estados; 2)

• A cada 2 dias observe por meio do relatório geral os últimos dias de novos registros e verifique os acompanhamentos desses clientes. • Diariamente, ao final do dia, observe

Mesmo nas variadas provas da vida podemos nos alegrar efusivamente, porque Deus é quem está no controle da nossa vida e ele trabalha em todas as circunstâncias