Sie sind auf Seite 1von 19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

APOSTILA JAVA PARA DESENVOLVIMENTO WEB

"

CAPTULO 7

Usando Taglibs
"Saber compreendermos as coisas que mais nos convm." Friedrich Nietzsche
Nesse captulo, voc aprender o que so Taglibs e JSTL. E tambm ter a chance de utilizar algumas das principais tags do grupo c o r ee f m t .

7.1 - TAGLIBS
No captulo anterior, comeamos a melhorar nossos problemas com relao mistura de cdigo Java com HTML atravs da E x p r e s s i o nL a n g u a g e . No entanto, ela sozinha no pode nos ajudar muito, pois ela no nos permite, por exemplo, instanciar objetos, fazer verificaes condicionais (i fe l s e ), iteraes como em um f o re assim por diante. Para que possamos ter esse comportamento sem impactar na legibilidade do nosso cdigo, teremos que escrever esse cdigo nos nossos JSPs numa forma parecida com o que j escrevemos l, que HTML, logo, teremos que escrever cdigo baseado em Tags. Isso mesmo, uma tag! A Sun percebeu que os programadores estavam abusando do cdigo Java no JSP e tentou criar algo mais "natural" (um ponto um tanto quanto questionvel da maneira que foi apresentada no incio), sugerindo o uso de tags para substituir trechos de cdigo. O resultado final um conjunto de tags (uma tag library, ou taglib ) padro, que possui, entre outras tags, a funcionalidade de instanciar objetos atravs do construtor sem argumentos.

7.2 - INSTANCIANDO POJOS


http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 1/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

Como j foi comentado anteriormente, os Javabeans devem possuir o construtor pblico sem argumentos (um tpico Plain Old Java Object: POJO), getters e setters. Instanci-los na nossa pgina JSP no complicado. Basta utilizarmos a tag correspondente para essa funo, que no nosso caso a < j s p : u s e B e a n > . Para utiliz-la, basta indicarmos qual a classe queremos instanciar e como se chamar a varivel que ser atribuda essa nova instncia.
< j s p : u s e B e a ni d = " c o n t a t o "c l a s s = " b r . c o m . c a e l u m . a g e n d a . m o d e l o . C o n t a t o " / >

Podemos imprimir o nome do contato (que est em branco, claro...):


$ { c o n t a t o . n o m e }

Mas, onde est o g e t N o m e ( ) ? A expression language capaz de perceber sozinha a necessidade de chamar um mtodo do tipo getter, por isso o padro getter/setter do POJO to importante hoje em dia. Desta maneira, classes como C o n t a t oso ferramentas poderosas por seguir esse padro pois diversas bibliotecas importantes esto baseadas nele: Hibernate, Struts, VRaptor, JSF, EJB etc.

Ateno Na Expression Language $ { c o n t a t o . n o m e }chamar o mtodo g e t N o m epor padro. Para que isso sempre funcione, devemos colocar o parmetro em letra minscula. Ou seja, $ { c o n t a t o . N o m e }no funciona.

Agora a melhor hora de aprender algo novo Se voc gosta de estudar essa apostila aberta da Caelum, certamente vai gostar dos novos cursos online que lanamos na plataforma Alura. Voc estuda a qualquer momento com a qualidade Caelum. Conhea a Alura.

7.3 - JSTL
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 2/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

Seguindo a ideia de melhorar o cdigo Java que precisa de uma maneira ou outra ser escrito na pgina JSP, a Sun sugeriu o uso da JavaServer Pages Standard Tag Library, a JSTL.

Observao Antes de 2005, JSTL significava JavaServer Pages Standard Template Library.

A JSTL a API que encapsulou em tags simples toda a funcionalidade que diversas pginas Web precisam, como controle de laos (f o r s ), controle de fluxo do tipo i fe l s e , manipulao de dados XML e a internacionalizao de sua aplicao. Antigamente, diversas bibliotecas foram criadas por vrios grupos com funcionalidades similares ao JSTL (principalmente ao Core), culminando com a apario da mesma, em uma tentativa da Sun de padronizar algo que o mercado v como til. Existem ainda outras partes da JSTL, por exemplo aquela que acessa banco de dados e permite escrever cdigos SQL na nossa pgina, mas se o designer no compreende Java o que diremos de SQL? O uso de tal parte da JSTL desencorajado. A JSTL foi a forma encontrada de padronizar o trabalho de milhares de programadores de pginas JSP. Antes disso, muita gente programava como nos exemplos que vimos anteriormente, somente com JSPs e Javabeans, o chamado Modelo 1, que na poca fazia parte dos Blueprints de J2EE da Sun (boas prticas) e ns vamos discutir mais para frente no curso.

As empresas hoje em dia


Muitas pginas JSP no Brasil ainda possuem grandes pedaos de scriptlets espalhados dentro delas. Recomendamos a todos os nossos alunos que optarem pelo JSP como camada de visualizao, que utilizem a JSTL e outras bibliotecas de tag para evitar o cdigo incompreensvel que pode ser gerado com scriptlets. O cdigo das scriptlets mais confunde do que ajuda, tornando a manuteno da
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 3/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

pgina JSP cada vez mais custosa para o programador e para a empresa.

7.4 - INSTALAO
Para instalar a implementao mais famosa da JSTL basta baixar a mesma no site http://jstl.java.net/. Ao usar o JSTL em alguma pgina precisamos primeiro definir o cabealho. Existem quatro APIs bsicas e vamos aprender primeiro a utilizar a biblioteca chamada de core.

7.5 - CABEALHO PARA A JSTL CORE


Sempre que vamos utilizar uma taglib devemos primeiro escrever um cabealho atravs de uma tag JSP que define qual taglib vamos utilizar e um nome, chamado

prefixo.
Esse prefixo pode ter qualquer valor mas no caso da taglib core da JSTL o padro da Sun a letra c. J a URI (que no deve ser decorada) mostrada a seguir e no implica em uma requisio pelo protocolo http e sim uma busca entre os arquivos .jar no diretrio lib.
< % @t a g l i bu r i = " h t t p : / / j a v a . s u n . c o m / j s p / j s t l / c o r e "p r e f i x = " c "% >

Voc pode tambm fazer o curso FJ-21 dessa apostila na Caelum Querendo aprender ainda mais sobre Java na Web e Hibernate? Esclarecer dvidas dos exerccios? Ouvir explicaes detalhadas com um instrutor? A Caelum oferece o curso FJ-21 presencial nas cidades de So Paulo, Rio de Janeiro e Braslia, alm de turmas incompany. Consulte as vantagens do curso Java para Desenvolvimento Web.

7.6 - FOREACH
Usando a JSTL core, vamos reescrever o arquivo que lista todos contatos.
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 4/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

O cabealho j conhecido da seo anterior:


< % @t a g l i bu r i = " h t t p : / / j a v a . s u n . c o m / j s p / j s t l / c o r e "p r e f i x = " c "% >

Depois, precisamos instanciar e declarar nosso DAO. Ao revisar o exemplo da lista atravs de scriptlets, queremos executar o seguinte: classe: b r . c o m . c a e l u m . j d b c . d a o . C o n t a t o D a o ; construtor: sem argumentos; varivel: DAO. J vimos a tag jsp:useBean , capaz de instanciar determinada classe atravs do construtor sem argumentos e dar um nome (id) para essa varivel. Portanto vamos utilizar a tag u s e B e a npara instanciar nosso C o n t a t o D a o :
< j s p : u s e B e a ni d = " d a o "c l a s s = " b r . c o m . c a e l u m . a g e n d a . d a o . C o n t a t o D a o " / >

Como temos a varivel d a o , desejamos chamar o mtodo g e t L i s t ae podemos fazer isso atravs da EL:
$ { d a o . l i s t a }

Desejamos executar um loop para cada c o n t a t odentro da coleo retornada por esse mtodo: array ou coleo: dao.lista; varivel temporria: contato. No nosso exemplo com scriptlets, o que falta a chamada do mtodo g e t L i s t a e a iterao:
< % / /. . . L i s t < C o n t a t o >c o n t a t o s=d a o . g e t L i s t a ( ) ; f o r( C o n t a t oc o n t a t o:c o n t a t o s){ % > < % = c o n t a t o . g e t N o m e ( ) % > ,< % = c o n t a t o . g e t E m a i l ( ) % > , < % = c o n t a t o . g e t E n d e r e c o ( ) % > ,< % = c o n t a t o . g e t D a t a N a s c i m e n t o ( )% > < % } % >

A JSTL core disponibiliza uma tag chamada c : f o r E a c hcapaz de iterar por uma
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 5/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

coleo, exatamente o que precisamos. No c : f o r E a c h , precisamos indicar a coleo na qual vamos iterar, atravs do atributo i t e m se tambm como chamar o objeto que ser atribudo para cada iterao no atributo v a r . O exemplo a seguir mostra o uso de expression language de uma maneira muito mais elegante:
< c : f o r E a c hv a r = " c o n t a t o "i t e m s = " $ { d a o . l i s t a } " > $ { c o n t a t o . n o m e } ,$ { c o n t a t o . e m a i l } , $ { c o n t a t o . e n d e r e c o } ,$ { c o n t a t o . d a t a N a s c i m e n t o } < / c : f o r E a c h >

Mais elegante que o cdigo que foi apresentado usando scriptlets, no?

forEach e varStatus possvel criar um contador do tipo i n tdentro do seu lao f o r E a c h . Para isso, basta definir o atributo chamado v a r S t a t u spara a varivel desejada e utilizar a propriedade c o u n tdessa varivel.
< t a b l eb o r d e r = " 1 " > < c : f o r E a c hv a r = " c o n t a t o "i t e m s = " $ { d a o . l i s t a } "v a r S t a t u s = " i d " > < t rb g c o l o r = " # $ { i d . c o u n t%2= =0?' a a e e 8 8 ':' f f f f f f '} "> < t d > $ { i d . c o u n t } < / t d > < t d > $ { c o n t a t o . n o m e } < / t d > < / t r > < / c : f o r E a c h > < / t a b l e >

7.7 - EXERCCIOS: FOREACH


1. Precisamos primeiro colocar os JARs da JSTL em nossa aplicao. a. Primeiro, v ao Desktop, e entre no diretrio C a e l u m / 2 1 / j s t l b. Haver dois jars, jstl-impl-xx.jar e jstl-api-xx.jar c. Copie-os (CTRL+C) e cole-os (CTRL+V) dentro de w o r k s p a c e / f j 2 1 a g e n d a / W e b C o n t e n t / W E B I N F / l i b

d. No Eclipse, d um F5 no seu projeto

Em casa Caso voc esteja em casa, pode fazer o download da JSTL API e da
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 6/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

implementao em: http://jstl.dev.java.net/download.html

2. Liste os contatos de C o n t a t o D a ousando j s p : u s e B e a ne JSTL. a. Crie o arquivo WebContent/lista-contatos-elegante.jsp usando o atalho de novo JSP no Eclipse; b. Antes de escrevermos nosso cdigo, precisamos importar a taglib JSTL Core. Isso feito com a diretiva < % @t a g l i b% >no topo do arquivo. Usando o recurso de autocompletar do Eclipse (inclusive na URL), declare a taglib no topo do arquivo:
< % @t a g l i bu r i = " h t t p : / / j a v a . s u n . c o m / j s p / j s t l / c o r e "p r e f i x = " c "% >

c. Localize a tag < b o d y >no arquivo e implemente o contedo da nossa pgina dentro do body. Vamos usar uma tabela HTML e as tags < j s p : u s e B e a n / >e
< c : f o r E a c h / >que

vimos antes:

< ! -c r i aoD A O> < j s p : u s e B e a ni d = " d a o "c l a s s = " b r . c o m . c a e l u m . a g e n d a . d a o . C o n t a t o D a o " / > < t a b l e > < ! -p e r c o r r ec o n t a t o sm o n t a n d oa sl i n h a sd at a b e l a> < c : f o r E a c hv a r = " c o n t a t o "i t e m s = " $ { d a o . l i s t a } " > < t r > < t d > $ { c o n t a t o . n o m e } < / t d > < t d > $ { c o n t a t o . e m a i l } < / t d > < t d > $ { c o n t a t o . e n d e r e c o } < / t d > < t d > $ { c o n t a t o . d a t a N a s c i m e n t o . t i m e } < / t d > < / t r > < / c : f o r E a c h > < / t a b l e >

d. Acesse http://localhost:8080/fj21-agenda/lista-contatos-elegante.jsp

Repare que aps criar uma nova pgina JSP no precisamos reiniciar o nosso container! 3. Scriptlets ou JSTL? Qual dos dois mais fcil para o designer entender?
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 7/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

7.8 - EXERCCIO OPCIONAL


1. Coloque um cabealho nas colunas da tabela com um ttulo dizendo que se refere a coluna. 2. Utilize uma varivel de status no seu c : f o r E a c hpara colocar duas cores diferentes em linhas pares e mpares. (Utilize o b o ximediatamente antes do exerccio como auxlio)

Tire suas dvidas no novo GUJ Respostas O GUJ um dos principais fruns brasileiros de computao e o maior em portugus sobre Java. A nova verso do GUJ baseada em uma ferramenta de perguntas e respostas (QA) e tem uma comunidade muito forte. So mais de 150 mil usurios pra ajudar voc a esclarecer suas dvidas. Faa sua pergunta.

7.9 - EVOLUINDO NOSSA LISTAGEM


A listagem dos nossos contatos funciona perfeitamente, mas o nosso cliente ainda no est satisfeito. Ele quer um pouco mais de facilidade nessa tela, e sugere que caso o usurio tenha e-mail cadastrado, coloquemos um link no e-mail que quando clicado abra o software de e-mail do computador do usurio para enviar um novo e-mail para esse usurio. Como podemos fazer essa funcionalidade? Vamos analisar o problema com calma. Primeiro, percebemos que vamos precisar criar um link para envio de e-mail. Isso facilmente conseguido atravs da tag do HTML < a >com o parmetro h r e f = " m a i l t o : e m a i l @ e m a i l . c o m ". Primeiro problema resolvido facilmente, mas agora temos outro. Como faremos a verificao se o e-mail est ou no preenchido?

7.10 - FAZENDO IFS COM A JSTL


Para que possamos fazer essa verificao precisaremos fazer um i fpara sabermos se o e-mail est preenchido ou no. Mas, novamente, no queremos
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 8/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

colocar cdigo Java na nossa pgina e j aprendemos que estamos mudando isso para utilizar tags. Para essa finalidade, existe a tag c : i f , na qual podemos indicar qual o teste lgico deve ser feito atravs do atributo t e s t . Esse teste informado atravs de Expression Language. Para verificarmos se o e-mail est preenchido ou no, podemos fazer o seguinte:
< c : i ft e s t = " $ { n o te m p t yc o n t a t o . e m a i l } " > < ah r e f = " m a i l t o : $ { c o n t a t o . e m a i l } " > $ { c o n t a t o . e m a i l } < / a > < / c : i f >

Podemos tambm, caso o e-mail no tenha sido preenchido, colocar a mensagem "e-mail no informado", ao invs de nossa tabela ficar com um espao em branco. Repare que esse justamente o caso contrrio que fizemos no nosso i f , logo, equivalente ao e l s e . O problema que no temos a tag e l s ena JSTL, por questes estruturais de XML. Uma primeira alternativa seria fazermos outro < c : i f >com a lgica invertida. Mas isso no uma soluo muito elegante. No Java, temos outra estrutura condicional que consegue simular um i f / e l s e , que o s w i t c h / c a s e . Para simularmos s w i t c h / c a s ecom JSTL, utilizamos a tag c : c h o o s ee para cada caso do switch fazemos c : w h e n .Od e f a u l tdo switch pode ser representado atravs da tag c : o t h e r w i s e , como no exemplo a seguir:
< c : c h o o s e > < c : w h e nt e s t = " $ { n o te m p t yc o n t a t o . e m a i l } " > < ah r e f = " m a i l t o : $ { c o n t a t o . e m a i l } " > $ { c o n t a t o . e m a i l } < / a > < / c : w h e n > < c : o t h e r w i s e > E m a i ln oi n f o r m a d o < / c : o t h e r w i s e > < / c : c h o o s e >

7.11 - EXERCCIOS: MELHORANDO A LISTA DE CONTATOS COM


CONDICIONAIS

1. Vamos colocar em nossa listagem um link para envio de e-mail caso o mesmo tenha sido informado. a. Abra o arquivo l i s t a c o n t a t o s e l e g a n t e . j s pno Eclipse; b. No momento de imprimir o e-mail do contato, adicione uma verificao para saber se o e-mail est preenchido e, caso esteja, adicione um link para envio de
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 9/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

e-mail:
< c : f o r E a c hv a r = " c o n t a t o "i t e m s = " $ { d a o . l i s t a } " > < t r > < t d > $ { c o n t a t o . n o m e } < / t d > < t d > < c : i ft e s t = " $ { n o te m p t yc o n t a t o . e m a i l } " > < ah r e f = " m a i l t o : $ { c o n t a t o . e m a i l } " > $ { c o n t a t o . e m a i l } < / a > < / c : i f > < / t d > < t d > $ { c o n t a t o . e n d e r e c o } < / t d > < t d > $ { c o n t a t o . d a t a N a s c i m e n t o . t i m e } < / t d > < / t r > < / c : f o r E a c h >

c. Acesse a pgina no navegador pelo endereo http://localhost:8080/fj21agenda/lista-contatos-elegante.jsp

2. Vamos colocar a mensagem "E-mail no informado" caso o e-mail no tenha sido informado a. Abaixo do novo i fque fizemos no item anterior, vamos colocar mais um if, dessa vez com a verificao contrria, ou seja, queremos saber se est vazio:
< c : f o r E a c hv a r = " c o n t a t o "i t e m s = " $ { d a o . l i s t a } " > < t r > < t d > $ { c o n t a t o . n o m e } < / t d > < t d > < c : i ft e s t = " $ { n o te m p t yc o n t a t o . e m a i l } " > < ah r e f = " m a i l t o : $ { c o n t a t o . e m a i l } " > $ { c o n t a t o . e m a i l } < / a > < / c : i f > < c : i ft e s t = " $ { e m p t yc o n t a t o . e m a i l } " > E m a i ln oi n f o r m a d o < / c : i f > < / t d > < t d > $ { c o n t a t o . e n d e r e c o } < / t d > < t d > $ { c o n t a t o . d a t a N a s c i m e n t o . t i m e } < / t d > < / t r > < / c : f o r E a c h >
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 10/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

b. Caso voc no possua nenhum contato sem e-mail, cadastre algum. c. Acesse a lista-contatos-elegante.jsp pelo navegador e veja o resultado;final

3. (Opcional) Ao invs de utilizar dois i f s , use a tag c : c h o o s e

Nova editora Casa do Cdigo com livros de uma forma diferente Editoras tradicionais pouco ligam para ebooks e novas tecnologias. No conhecem programao para revisar os livros tecnicamente a fundo. No tm anos de experincia em didticas com cursos. Conhea a Casa do Cdigo, uma editora diferente, com curadoria da Caelum e obsesso por livros de qualidade a preos justos. Casa do Cdigo, ebook com preo de ebook.

7.12 - IMPORTANDO PGINAS


Um requisito comum que temos nas aplicaes Web hoje em dia colocar cabealhos e rodap nas pginas do nosso sistema. Esses cabealhos e rodaps podem ter informaes da empresa, do sistema e assim por diante. O problema que, na grande maioria das vezes, todas as pginas da nossa aplicao precisam ter esse mesmo cabealho e rodap. Como poderamos resolver isso? Uma primeira alternativa e talvez a mais inocente colocarmos essas informaes em todas as pginas da nossa aplicao, copiando e colando todo o cabealho vrias vezes. Mas o que aconteceria se precisssemos mudar o logotipo da empresa? Teramos que mudar todas as pginas, o que no um trabalho agradvel.
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 11/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

Uma alternativa melhor seria isolarmos esse cdigo que se repete em todas as pginas em uma outra pgina, por exemplo, c a b e c a l h o . j s pe todas as pginas da nossa aplicao, apenas dizem que precisam dessa outra pgina nela, atravs de uma tag nova, a c : i m p o r t . Para utiliz-la, podemos criar uma pagina com o cabealho do sistema, por exemplo, a c a b e c a l h o . j s p :
< i m gs r c = " i m a g e n s / l o g o m a r c a . j p g "/ >N o m ed ae m p r e s a

E uma pgina para o rodap, por exemplo, r o d a p e . j s p :


C o p y r i g h t2 0 1 0-T o d o so sd i r e i t o sr e s e r v a d o s

Bastaria que, em todas as nossas pginas, por exemplo, na l i s t a c o n t a t o s e l e g a n t e . j s p , colocssemos ambas as pginas, atravs da c : i m p o r tcomo abaixo:
< % @t a g l i bu r i = " h t t p : / / j a v a . s u n . c o m / j s p / j s t l / c o r e "p r e f i x = " c "% > < h t m l > < b o d y > < c : i m p o r tu r l = " c a b e c a l h o . j s p "/ > < j s p : u s e B e a ni d = " d a o "c l a s s = " b r . c o m . c a e l u m . a g e n d a . d a o . C o n t a t o D a o " / > < t a b l e > < ! -f o r> < c : f o r E a c hv a r = " c o n t a t o "i t e m s = " $ { d a o . l i s t a } " > < t r > < t d > $ { c o n t a t o . n o m e } < / t d > < t d > $ { c o n t a t o . e m a i l } < / t d > < t d > $ { c o n t a t o . e n d e r e c o } < / t d > < t d > $ { c o n t a t o . d a t a N a s c i m e n t o . t i m e } < / t d > < / t r > < / c : f o r E a c h > < / t a b l e > < c : i m p o r tu r l = " r o d a p e . j s p "/ > < / b o d y > < / h t m l >

7.13 - EXERCCIOS: ADICIONANDO CABEALHOS E RODAPS


1. Vamos primeiro criar o nosso cabealho, utilizando o logotipo da Caelum. a. V no Desktop, e entre em C a e l u m / 2 1 / i m a g e n se copie esse diretrio para dentro do diretrio W e b C o n t e n tdo seu projeto. Esse diretrio possui o logotipo da Caelum.
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 12/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

Ou voc pode usar o que se encontra em: http://www.caelum.com.br/imagens/base/caelum-ensinoinovacao.1376940690.png b. Crie dentro de W e b C o n t e n tum arquivo chamado c a b e c a l h o . j s pcom o logotipo do sistema:
< i m gs r c = " i m a g e n s / c a e l u m . p n g "/ > < h 2 > A g e n d ad eC o n t a t o sd o ( a )( S e un o m ea q u i ) < / h 2 > < h r/ >

c. Crie tambm a pgina r o d a p e . j s p :


< h r/ > C o p y r i g h t2 0 1 0-T o d o so sd i r e i t o sr e s e r v a d o s

d. Podemos importar as duas pginas (c a b e c a l h o . j s pe r o d a p e . j s p ), dentro da nossa


l i s t a c o n t a t o s e l e g a n t e . j s pusando

a tag c : i m p o r t /que vimos:

< h t m l > < b o d y > < % @t a g l i bu r i = " h t t p : / / j a v a . s u n . c o m / j s p / j s t l / c o r e "p r e f i x = " c "% > < c : i m p o r tu r l = " c a b e c a l h o . j s p "/ > < ! -c r i aal i s t a> < j s p : u s e B e a ni d = " d a o "c l a s s = " b r . c o m . c a e l u m . a g e n d a . d a o . C o n t a t o D a o " / > < t a b l e > < ! -f o r> < c : f o r E a c hv a r = " c o n t a t o "i t e m s = " $ { d a o . l i s t a } " > < t r > < t d > $ { c o n t a t o . n o m e } < / t d > < t d > < c : i ft e s t = " $ { n o te m p t yc o n t a t o . e m a i l } " > < ah r e f = " m a i l t o : $ { c o n t a t o . e m a i l } " > $ { c o n t a t o . e m a i l } < / a > < / c : i f > < c : i ft e s t = " $ { e m p t yc o n t a t o . e m a i l } " > E m a i ln oi n f o r m a d o < / c : i f > < / t d > < t d > $ { c o n t a t o . e n d e r e c o } < / t d > < t d > $ { c o n t a t o . d a t a N a s c i m e n t o . t i m e } < / t d > < / t r > < / c : f o r E a c h > < / t a b l e > < c : i m p o r tu r l = " r o d a p e . j s p "/ > < / b o d y > < / h t m l >

e. Visualize o resultado final acessando no navegador h t t p : / / l o c a l h o s t : 8 0 8 0 / f j 2 1 http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 13/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

a g e n d a / l i s t a c o n t a t o s e l e g a n t e . j s p

7.14 - FORMATANDO AS DATAS


Apesar da nossa listagem de contatos estar bonita e funcional, ela ainda possui problemas, por exemplo, a visualizao da data de nascimento. Muitas informaes aparecem na data, como horas, minutos e segundos, coisas que no precisamos. J aprendemos anteriormente que uma das formas que podemos fazer essa formatao em cdigo Java atravs da classe S i m p l e D a t e F o r m a t , mas no queremos utiliz-la aqui, pois no queremos cdigo Java no nosso JSP. Para isso, vamos utilizar outra Taglib da JSTL que a taglib de formatao, a f m t . Para utilizarmos a taglib f m t , precisamos import-la, da mesma forma que fizemos com a tag c o r e , atravs da diretiva de t a g l i b , como abaixo:
< % @t a g l i bu r i = " h t t p : / / j a v a . s u n . c o m / j s p / j s t l / f m t "p r e f i x = " f m t "% >

Dentro da taglib f m t , uma das tags que ela possui a f o r m a t D a t e , que faz com que um determinado objeto do tipo j a v a . u t i l . D a t eseja formatado para um dado p a t t e r n . Ento, podemos utilizar a tag f m t : f o r m a t D a t eda seguinte forma:
< f m t : f o r m a t D a t ev a l u e = " $ { c o n t a t o . d a t a N a s c i m e n t o . t i m e } " p a t t e r n = " d d / M M / y y y y "/ >

Repare que, na Expression Language que colocamos no v a l u e , h no final um . t i m e . Isso porque o atributo v a l u es aceita objetos do tipo j a v a . u t i l . D a t e ,e nossa data de nascimento um j a v a . u t i l . C a l e n d a rque possui um mtodo g e t T i m e ( )para chegarmos ao seu respectivo j a v a . u t i l . D a t e .

http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais

14/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

Como fazer patterns mais complicados? Podemos no atributo p a t t e r ncolocar outras informaes com relao ao objeto j a v a . u t i l . D a t eque queremos mostrar, por exemplo:
msHD-

Minutos Segundos Horas (0 - 23) Dia no ano, por exemplo, 230

Sugerimos que quando precisar de formataes mais complexas, leia a documentao da classe S i m p l e D a t e F o r m a t , aonde se encontra a descrio de alguns caracteres de formatao.

J conhece os cursos online Alura? A Alura oferece dezenas de cursos online em sua plataforma exclusiva de ensino que favorece o aprendizado com a qualidade reconhecida da Caelum. Voc pode escolher um curso nas reas de Java, Ruby, Web, Mobile, .NET e outros, com uma assinatura que d acesso a todos os cursos. Conhea os cursos online Alura.

7.15 - EXERCCIOS: FORMATANDO A DATA DE NASCIMENTO DOS CONTATOS


1. Vamos fazer a formatao da data de nascimento dos nossos contatos. a. Na l i s t a c o n t a t o s e l e g a n t e . j s p , importe a taglib f m tno topo do arquivo. Use o autocompletar do Eclipse para te ajudar a escrever:
< % @t a g l i bu r i = " h t t p : / / j a v a . s u n . c o m / j s p / j s t l / f m t "p r e f i x = " f m t "% >

b. Troque a Expression Language que mostra a data de nascimento para passar pela tag f o r m a t D a t eabaixo:
< f m t : f o r m a t D a t ev a l u e = " $ { c o n t a t o . d a t a N a s c i m e n t o . t i m e } " p a t t e r n = " d d / M M / y y y y "/ >
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 15/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

c. Acesse a pgina pelo navegador e veja o resultado final:

7.16 - PARA SABER MAIS: TRABALHANDO COM LINKS COM <C:URL>


Muitas vezes trabalhar com links em nossa aplicao complicado. Por exemplo, no arquivo c a b e c a l h o . j s pinclumos uma imagem chamada c a e l u m . p n g que est na pasta i m a g e n s . Inclumos esta imagem com a tag HTML < i m g >utilizando o caminho imagens/caelum.png que um caminho relativo, ou seja, se o c a b e c a l h o . j s p estiver na raiz do projeto, o arquivo c a e l u m . p n gdever estar em uma pasta chamada i m a g e n stambm na raiz do projeto. Utilizar caminhos relativos muitas vezes perigoso. Por exemplo, se colocarmos o arquivo c a b e c a l h o . j s pem um diretrio chamado a r q u i v o s _ c o m u n s , a imagem que tnhamos adicionado ser procurada em um diretrio i m a g e n sdentro do diretrio a r q u i v o s _ c o m u n s . Resultado, a imagem no ser exibida. Poderamos resolver isso utilizando um caminho absoluto. Ao invs de adicionarmos a imagem utilizando o caminho i m a g e n s / c a e l u m . p n g , poderamos usar / i m a g e n s / c a e l u m . p n g . S que utilizando a /ele no vai para a raiz da minha aplicao e sim para a raiz do tomcat, ou seja, ele iria procurar a imagem c a e l u m . p n gem um diretrio i m a g e n sna raiz do tomcat, quando na verdade o diretrio nem mesmo existe. Poderamos resolver isso utilizando o caminho / f j 2 1 t a r e f a s / i m a g e n s / c a e l u m . p n g . Nosso problema seria resolvido, entretanto, se algum dia mudssemos o contexto da aplicao para t a r e f a sa imagem no seria encontrada, pois deixamos fixo no nosso jsp qual era o contexto da aplicao.
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 16/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

Para resolver este problema, podemos utilizar a tag < c : u r l >da JSTL. O uso dela extremamente simples. Para adicionarmos o logotipo da caelum no c a b e c a l h o . j s p , faramos da seguinte maneira:
< c : u r lv a l u e = " / i m a g e n s / c a e l u m . p n g "v a r = " i m a g e m " / > < i m gs r c = " $ { i m a g e m } " / >

Ou de uma forma ainda mais simples:


< i m gs r c = " < c : u r lv a l u e = " / i m a g e n s / c a e l u m . p n g " / > " / >

O HTML gerado pelo exemplo seria: <img src="fj21tarefas/imagens/caelum.png"/>.

7.17 - EXERCCIOS OPCIONAIS: CAMINHO ABSOLUTO


1. a. Abra o arquivo c a b e c a l h o . j s pe altere-o adicionando a tag < c : u r l > :
< i m gs r c = " < c : u r lv a l u e = " / i m a g e n s / c a e l u m . p n g " / > "/ >

Como vamos usar a JSTL tambm nesse novo arquivo de cabealho, no deixe de incluir a declarao da taglib no incio do arquivo. (o comando < % @t a g l i b. . .% > semelhante ao usado na listagem) b. Visualize o resultado acessando no navegador h t t p : / / l o c a l h o s t : 8 0 8 0 / f j 2 1 a g e n d a / l i s t a c o n t a t o s e l e g a n t e . j s p

c. A imagem c a e l u m . p n gcontinua aparecendo normalmente Se, algum dia, alterarmos o contexto da nossa aplicao, o cabealho continuaria exibindo a imagem da maneira correta. Usando a tag < c : u r l >ficamos livres para utilizar caminhos absolutos.

Voc no est nessa pgina a toa Voc chegou aqui porque a Caelum referncia nacional em cursos de Java, Ruby, Agile, Mobile, Web e .NET. Faa curso com quem escreveu essa apostila. Consulte as vantagens do curso Java para Desenvolvimento

Web.
http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais 17/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

7.18 - PARA SABER MAIS: OUTRAS TAGS


A JSTL possui alm das tags que vimos aqui, muitas outras, e para diversas finalidades. Abaixo est um resumo com algumas das outras tags da JSTL: c:catch - bloco do tipo try/catch c:forTokens - for em tokens (ex: "a,b,c" separados por vrgula) c:out - sada c:param - parmetro c:redirect - redirecionamento c:remove - remoo de varivel c:set - criao de varivel Leia detalhes sobre as taglibs da JSTL (JavaDoc das tags e classes) em: http://java.sun.com/products/jsp/jstl/reference/api/index.html

CAPTULO ANTERIOR:

JavaServer Pages
PRXIMO CAPTULO:

Tags customizadas com Tagfiles

Voc encontra a Caelum tambm em:

Blog Caelum

http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais

18/19

21/1/2014

Usando Taglibs - Java para Desenvolvimento Web

Cursos Online

Facebook

Newsletter

Casa do Cdigo

Twitter

http://www.caelum.com.br/apostila-java-web/usando-taglibs/#7-11-exercicios-melhorando-a-lista-de-contatos-com-condicionais

19/19

Das könnte Ihnen auch gefallen