Вы находитесь на странице: 1из 55

Linguagem de Expresso, JSTL

e DisplayTag
Fornece tags para encapsular funcionalidades
complexas para utilizao em JSPs

Motivao p/ utilizao de Tags


Customizadas

Facilita o desenvolvimento de futuras pginas JSP e


permite o reuso de cdigo
Pois, pginas com excesso de scriptlets dificultam a
sua leitura, manuteno e expanso

Facilitam a diviso de tarefas


Possuem sintaxe similar a linguagem XML
Podem substituir scriptlets e JavaBeans

Caractersticas
Pode ser parametrizada com a utilizao de
atributos
Pode acessar todos os objetos disponveis em uma
pgina JSP
Pode modificar a resposta da pgina que a chamou
Voc pode criar e iniciar componentes JavaBeans

Como Utilizar as Taglibs

Tipos de Tag
So expressas utilizando sintaxe XML
<tlt:tag>
body
</tlt:tag>

Uma tag sem corpo pode ser expressa da seguinte


maneira
<tlt:tag />

Importando uma biblioteca de tags


Utilize a diretiva taglib
<%@ taglib uri= prefix= %>
uri especifica a localizao do TLD (Tag Lib
Descriptor)
prefix uma string que utilizada unicamente
para identificar as tags personalizadas que vc deseja
utilizar

TLD (Tag Lib Descriptor)


um arquivo XML que descreve o mapeamento entre as tags
H duas maneiras bsicas 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 pgina tem que


usar exatamente esta
URI)

JSTL
(JSP Standard Tag Libraries)

Viso Geral do JSTL


Linguagem de Expresso (EL)
Biblioteca de Tags
Core
Format
SQL
XML

Linguagem de Expresso
Permite embutir em atributos expresses dentro de
delimitadores ${...} facilitando o acesso a
atributos, propriedades e mtodos. Exemplos
<%=((Usuario)request.getAttribute("usuario")).
getGrupo().getNome()%>
Corresponde a: ${usuario.grupo.nome}
<jsp:getProperty name=usuario property=nome />
Corresponde a: ${usuario.nome}

10

Resoluo de Identificadores
A EL transforma identificadores em objetos fazendo
uma chamada ao mtodo
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 no seja encontrado

11

Objetos implcitos fornecidos pelas EL


Alm de acesso a JavaBean, a EL tambm facilitam a leitura de
parmetros de requisio, cabealhos HTTP, cookies e parmetros de
inicializao
Os objetos implcitos tm precedncia sobre as variveis (objetos) de
escopo
param: acessa parmetros de request. Exemplo campo login de
um formulrio:
<%= request.getParameter("login") %>
${param.login} ou ${param[login]}
paramValues: quando o parmetro tiver mltiplos valores. Ex:
${paramValues[perfies][0]}

12

Objetos implcitos fornecidos pelas EL


initParam: parametros de inicializao 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>
. . .
</web-app>
13

Objetos implcitos fornecidos pelas EL


header : acessa os atributos do cabealho HTTP.
headerValues: para cabealhos de mltiplos
valores
Ex: ${header.host} ou ${header[host]}
${headerValues[Accept-Language][0]}

14

Objetos implcitos fornecidos pelas EL


pageContext: Mesmo objeto pageContext do JSP
Exemplo: ${pageContext}
pageScope, requestScope, sessionScope,
applicationScope: acessa objetos em um contexto
especfico
Ex: ${requestScope.funcionario}
${sessionScope.funcionario}

cookies: retorna um cookie a partir do seu nome


Ex: ${cookie.favorito}

15

Operadores
A EL fornece operadores aritmticos, lgicos e relacionais
Aritmticos: +, -, *, / (div), % (mod)
Lgicos: && (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 operao empty obj retorne true caso obj seja null
Tambm retorna true para: uma string vazia, um array vazio, ou
um objeto que implemete Map ou List e esteja vazio
16

JSTL
JSP Standard Tag Library

17

JSTL
uma especificao 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 expresso (EL)
Oferece mais controle ao autor de pginas sem
necessariamente aumentar a complexidade
Estimula a separao da apresentao e lgica
Estimula o investimento em solues MVC
18

Histrico
Julho/2001 - Criado o projeto (JSR-052)
Junho/2002 lanado o JSTL 1.0 baseado no JSP 1.2
(Tomcat4 e maioria dos servidores corporativos)
Janeiro/2004 - lanado o JSTL 1.1 baseado no JSP
2.0 (Tomcat 5)
Julho/2004 - lanado o JSTL 1.1.1

19

JSTL
Core (ncleo): Contm tags usadas para controle de
fluxo e sada de mensagens
XML: Tags utilitrias para o processamento de XML
Format (Internacionalizao): usadas para
formatao de texto, valores monetrios e nmeros
com base em uma determinada localizao
SQL: fornece tags para acesso a banco de maneira
simplificada sem a necessidade de cdigo Java

20

JSTL - Core
<c:out>: avalia uma expresso e exibe o resultado na
pgina
<c:out value="${usuario.nome}">
Usurio Annimo
</c:out>
equivalente a:

Ser exibido apenas quando o value for


vazio ou null

<c:out value="${usuario.nome}"
default="Usurio Annimo />
<c:out value= escapeXml=false>
Usuario <i>annimo</i>.
</c:out>
Atributo opcional, indica se caracteres
especiais (<, &, ...) devem ser convertidos
para entidades XML equivalentes (&lt,
&amp, ...). Default true

21

JSTL - Core
<c:set>: define o valor de uma varivel de escopo
Valor default
<c:set var="usuario" scope="page"
value="${sessionScope.usuarioLogado}"/>

ou uma propriedade

usado para nome de variveis de


escopo

<c:set target="${usuario}"
property="nome" value="Maria" />
property e value correspondem a
nome/valor da propriedade
22

JSTL - Core
Exemplos:
<c:set var="nome" value="Maria"/>
Varivel nome: <c:out value="${nome}"/>
<c:set target="${usuario}" property="nome"
value="${nome}"/>
Propriedade nome do objeto usurio:
<c:out value="${usuario.nome}"/>

23

JSTL - Core
<c:remove>: remove uma varivel de escopo
No possui corpo
Atributos
var varivel a ser removida
scope escopo (opcional) da varivel
<c:remove var="usuario"/>
Antes da remoo: <c:out value="${usuario}"/>
<c:remove var="usuario"/>
<c:out value="${usuario}" escapeXml="false">
Varivel <i>usuario</i> foi removida do escopo!
</c:out>
24

JSTL - Core
<c:catch>: captura uma exceo 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!
</c:out>

25

JSTL - Core
<c:if>: executa o corpo da tag apenas se uma
expresso for verdadeira
<c:if test="${empty sessionScope.usuarioLogado}">
<c:redirect url="login.jsp"/>
</c:if>

26

JSTL - Core
<c:chose>: executa uma tag quando a expresso da
subtag for verdadeira
<c:choose>
<c:when test="${empty usuario.username}">
<b>Campo login obrigatrio!<br>
</c:when>
<c:when test="${empty usuario.senha}">
<b>Campo senha obrigatrio!<br>
</c:when>
<c:when test="${usuario.senha ne usuario.username}">
<b>Senha invlida!<br>
</c:when>
<c:otherwise>
<c:set var="usuarioLogado" scope="session"
value="${usuario}"/>
<c:redirect url="index.jsp"/>
</c:otherwise>
</c:choose>
27

JSTL - Core
forEach - usada para percorrer uma coleo 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 interao
<c:forEach var="i" begin="1" end="10">
<li> ${i}
</c:forEach>
28

JSTL - Core
c:param serve para passar nome e o valor de um
parmetro. uma sub-tag das demais tags de
manipulao de URL (<c:url>, <c:import> e
<c:redirect>)
Atributos
name nome do parmetro
value valor de parmetro (pode ser o corpo da tag)

29

JSTL - Core
c:url cria uma string contendo uma URL
c:import importa o contedo de uma URL
c:redirect redireciona o cliente da aplicao
para uma outra URL

30

JSTL Core (<c:import>


Importa o contedo 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 atribudo a uma
varivel definida pelos atributos opcionais (var e
scope) ou a um java.io.Reader (atributo varReader)

Exemplo:
<c:import
url=http://www.teste.com/topo.htm />
31

JSTL Format
Fornece suporte:
internacionalizao (i18n, internationalization i +
18 letras + n)
Fornece tags para internacionalizao de mensagens
atravs de resource bundles

Formatao
Formata nmeros, datas e horas de acordo com a
localizao (i10n localization) do usurio

32

JSTL Format (fmt:formatNumber)


Formata um nmero, valor monetrio ou porcentagem, de
acordo com as preferncias de localizao
Atributos
value valor a ser formatado (pode ser o corpo da tag)
type (opcional) number (default), currency ou
percent
pattern (opcional) mascara de formatao, de acordo com
as regras de java.text.DecimalFormat
currencySymbol (opcional) smbolo monetrio (como R$ ou
US$)
currencyCode (opcional) cdigo ISO da moeda
33

JSTL Format (fmt:formatNumber)


groupingUsed determina se os dgitos sero agrupados (ex:
5.350 em vez de 5350). A formatao determinada pelo
Locale
maxIntegerDigits/minIntegerDigits nmeros mnimos e
mximos da parte inteira
maxFractionDigits/minFractionDigits nmeros mnimos e
mximos de casas decimais
var varivel (opcional) que conter a sada
scope - (opcional) escopo da varivel
Corpo da Tag: atributo value

34

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%>
R$ 1.234.567,89
</fmt:formatNumber>
12,300
123.456,79
R$ 1.234,00
3,14159
35

JSTL Format

<fmt:parseNumber>

Obtm um Number a partir de uma String


value valor a ser transformado
integerOnly (opcional) faz o parsing apenas da
parte inteira do nmero
Outros atributos opcionais: var, scope, type e pattern
<c:set var="reais" value="R$ 8,90"/>
<fmt:parseNumber value="${reais}"
type="currency"
parseLocale="pt_BR" />

Corpo da Tag: atributo value

36

JSTL Format

<fmt:formatDate>

Formata uma data e/ou hora de acordo com a


Localizao ou com parmetros customizados
Atributos:
value: data a ser formatada
Type (opcional): date (default), time ou both
dateStyle ou timeStyle (opcional) : nvel de
detalhamento da data/hora
timeZone (opcional): define o fuso-horrio
Outros atributos opcionais: var, scope e pattern

37

JSTL Format

<fmt:formatDate>

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


<br>
<fmt:formatDate value="${agora}"
timeStyle="long"
dateStyle="long"/>
<br>
<fmt:formatDate value="${agora}" pattern="dd.MMM.yy"/>

38

JSTL Format

<fmt:parseDate>

Obtm 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) nvel de
detalhamento da data/hora
timeZone: (opcional) define o fuso-horrio
parseLocale: Locale usado para personalizar a
transformao
Outros atributos opcionais: var, scope e pattern

39

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
Sbado, 16 de Julho de 2005

40

Display Tag Library


uma sute open source de tags customizadas que
fornecem uma apresentao web de alto nvel para
ser usada em aplicaes MVC
possvel mostrar tabelas, isto , listar as
informaes de objetos de uma aplicao com
diversas funcionalidades:
diferenciao nas cores das linhas, ordenao nas
colunas, paginao dos dados, agrupamento de
informaes, exportao dos dados, links e decorao
customizvel
41

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" />

Sada

Teste String 1
Teste String 2
Teste String 3
Teste String 4

42

Instalao
Deve seguir os seguintes passos:
Colocar o arquivo displaytag.tld no diretrio
WEB-INF da aplicao
Colocar o displaytag.jar no WEB-INF/LIB
Adicionar no CLASSPATH da aplicao as seguintes
bibliotecas usadas pela DisplayTag:
commons-logging.jar
commons-lang.jar (verso 2.0)
commons-collections.jar
commons-beanutils.jar
log4j.jar
43

<display:table>
Gera um tabela html baseada em uma coleo de objetos
Cada item formatado de acordo com a tag column
aninhada dentro dela
java.util.List
<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="Commentrios"/>
</display:table>

44

Tags table e column


<% List produtos = new ListaProdutos();
request.setAttribute("produtos", produtos);
%>
<display:table name="produtos">
<display:column property="nome" title="Nome"/>
<display:column property="preco" title="Preo"/>
</display:table>
O valor mostrado ser o resultado da propriedade (atributo
property) ou de um decorator (se houver um).

Nome Preo
Feijo 2.5
Arroz 4.0
Farinha 3.5
Trigo
5.8
Aucar 1.5

45

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 aplicao

Feijo 2.5
Arroz 4.0
Farinha 3.5
Trigo 5.8
Acar 1.5

As propriedades e os valores possveis esto em


http://displaytag.sourceforge.net/configuration.html
<display:table name="produtos">
<display:column property="nome"/>
<display:column property="preco"/>
<display:setProperty
name="basic.show.header"
value="false"/>
</display:table>

indicamos que a tabela gerada no


deve mostrar a linha de ttulo, onde
ficam os nomes das colunas

46

footer
Tambm 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="Preo"/>
<display:footer>
<tr> <td>total:</td>
<td><%= produtos.getTotal() %></td>
</tr>
</display:footer>
</display:table>

47

Criando objeto implcito na tabela


possvel criar um objeto implicitamente na tabela
ou no escopo da pgina usando o atributo 'id'
<display:table name="produtos" id="prod">
<display:column title="Produto" property="nome" />
<display:column title="Preo" property="preco" />
<display:column title="Desconto 10%">
${prod.preco * 0.9}
</display:column>
Produto Preo Desc. 10%
</display:table>

Feijo
Arroz
Farinha
Trigo
Acar

2.5
4.0
3.5
5.8
1.5

2.25
3.6
3.15
5.22
1.35

48

Links Dinmicos
Para criar links dinmicos 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 dinmico:
href - a URL usada para construir o link
paramID - o nome do parmetro 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
retornar o valor que ficar na URL

49

Links Dinmicos
<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="Preo" />
</display:table>

50

Ordenao

51

Usando Decorator para transformar dados

Um decorator um design pattern onde um objeto


fornece funcionalidades bsicas encapsuladas para
outros objetos
Ajuda a formatar datas, valores monetrios,
nmeros, etc de acordo com a nossa necessidade

52

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 mtodo construtor
No preciso fazer overload de todos os mtodos no
Decorator, somente daquele que sero formatados. o
mtodo getXXX do Decorator sempre ser chamado
primeiro para uma property, mas se ele no existir,
chamado o mtodo da classe de negcio

53

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="Preo" />
<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);
}
return retorno;
}}

54

Bibliografia
SCWCD Exam Study Kit Java Web Component Developer
Certification. Autores: Hanumant Deshmukh, Jignesh Malavia,
Jacquelyn Carter, 2003
Tag Libraries Tutorial. Sun Microsystems. Julho, 2000.

55

Вам также может понравиться