Vous êtes sur la page 1sur 26

DSW - Expression Language e JSTL

Eduardo Gondo
profeduardo@ap.com.br
Introducao
scriptlets e expressoes deixam a pagina JSP muito confusas com a
mistura de html com Java
fazendo com que o web designer precise entender Java para alterar
os sistemas
dentro das scriptlets se colocarmos codigo HTML podemos
esquecer de fechar as tags
a solucao para estes problemas e ter algo que funcione como uma
scriptlet, mas que nao atrapalhe muito o leiaute da pagina e, se
possvel, se pare cam com as tecnologias de paginas WEB (HTML,
Javascript e jQuery)
e isso e possvel com as Expression Language (EL) e Java Standard
Tag Library (JSTL)
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 2 / 26
EL - Expression Language
Facilita o acesso as informa coes presentes em um escopo
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 3 / 26
EL - Expression Language
Vamos mostrar um exemplo usando objetos
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 4 / 26
EL - Expression Language
Considere o codigo abaixo para exibir um advogado armazenada na
session em uma tabela:
Advogado adv = new Advogado ();
adv.setNome("Joaquim Barbosa");
adv.setOab (111);
adv.setEmail("quim@stjd.jus.br");
HttpSession session = request.getSession ();
session.setAttribute("ministro", adv);
request.getRequestDispatcher("mostra.jsp").forward(request ,
response);
<table>
<tr><td>Nome </ td><td>${ministro.nome}</ td></ tr>
<tr><td>OAB </ td><td>${ministro.oab} </ td> </ tr>
<tr><td>Email </ td><td>${ministro.email}</ td> </ tr>
</ table>
Note que e transparente para a Expression Language o local onde esta
armazenado o objeto.
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 5 / 26
EL - escopo
veja a servlet abaixo:
protected void doGet(HttpServletRequest request ,
HttpServletResponse response) throws ServletException ,
IOException {
request.setAttribute("msg", "Ol a , tudo bem?");
HttpSession session = request.getSession ();
session.setAttribute("msg", "How are you?");
ServletContext application = this.getServletContext ();
application.setAttribute("msg", "Como estas?");
request.getRequestDispatcher("exibe.jsp").forward(request ,
response);
}
O que sera impresso na pagina JSP se colocarmos:
<h2>${msg}</ h2>
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 6 / 26
EL - escopo
a EL faz uma busca nos tres locais de armazenamento procurando
o objeto associado `a chave (no caso do exemplo, msg)
essa busca e feita na seguinte ordem: request, session e
application
quando ele encontra a chave, a busca e interrompida e o objeto
retornado
assim, a mensagem retornada no exemplo anterior sera
Ola, tudo bem?
para contornar esse problema, devemos adicionar o escopo `a EL
<dl>
<dt>request </ dt><dd>${requestScope.msg} </ dd>
<dt>session </ dt><dd>${sessionScope.msg} </ dd>
<dt>application </ dt><dd>${applicationScope.msg}</ dd>
</ dl>
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 7 / 26
Considerac oes sobre EL
EL ajuda mostrar informacoes que estao armazenados no request,
session e application
e transparente quanto `a localiza cao das informac oes
podemos armazenar qualquer tipo de objeto, onde o acesso aos
atributos e feito atraves do metodo getXXXX()
contudo, nao podemos tomar decisoes com base nas informa coes
(if)
e nem percorrer um conjunto de informacoes usando um comando
de repeticao (for)
e nesse contexto que se faz necessario a utiliza cao da JSTL.
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 8 / 26
JSTL - Java Standard Tag Library
estamos retirando a necessidade de scriptlets no jsp
deixando apenas tags acabamos com o inconveniente do Java
misturado ao HTML
a JSTL e uma colecao de tags que realizam as tarefas do codigo
Java, especicamente do for e do if
complementam a facilidade da Expression Language permitindo o
uso dentro de suas tags
aumento de legibilidade do codigo e a interacao entre
desenvolvedores e web designers
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 9 / 26
JSTL - instalacao e conguracao
acesse https://jstl.java.net/download.html
baixe os arquivos javax.servlet.jsp.jstl-api-1.2.1.jar e
javax.servlet.jsp.jstl-1.2.1.jar
cada um deles se encontra em um link da pagina
coloque na pasta WEB-INF/lib do seu projeto
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 10 / 26
JSTL - Bibliotecas
As tags da JSTL estao divididas em 4 bibliotecas:
Core tags de controle de uxo, manipula cao de variaveis,
importacao de dados, etc
Format tags para formatacao de datas, n umeros e suporte a
internacionaliza cao
SQL tags para manipula cao de banco de dados
XML tags para manipula cao de XML
Trabalharemos apenas com as 2 primeiras: Core e Format. Para maiores
informacoes, consulte:
http://docs.oracle.com/javaee/5/tutorial/doc/bnake.html
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 11 / 26
JSTL - Utilizacao
Precisamos adicionar a diretiva taglib nas paginas que usarao JSTL:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
Acima temos o codigo para importaras tags core para dentro da
pagina JSP e abaixo segue o codigo para importar as tags de
formatacao:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"
%>
uri representa a colecao de tags que estamos utilizando
prex e o valor que usamos para referenciar as tags da JSTL
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 12 / 26
JSTL - exemplo c:if
double valor = 3340.80;
request.setAttribute("salario", valor);
request.getRequestDispatcher("pag.jsp").forward(request ,
response);
Figura : fragmento de uma servlet
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
...
<html>
<head>... </ head>
<body>
<c:if test="{salario > 0}">
O valor do salario e ${salario }.
</c:if>
</ body>
</ html>
Figura : pag.jsp
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 13 / 26
exemplo c:choose
O <c:if> nao contempla o senao, as tags <c:choose>, <c:when> e
<c:otherwise> reproduzem o comportamento do if/else:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
...
<html>
<head>... </ head>
<body>
<c:choose>
<c:when test="{salario > 0}">
O valor do salario e ${salario }.
</c:when>
<c:otherwise>
Salario 0 ou negativo.
</c:otherwise>
</c:choose>
</ body>
</ html>
Figura : pag.jsp
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 14 / 26
exemplo c:forEach
Para percorrermos uma colecao de dados (vetor, lista, etc) usamos o
comando <c:forEach>. Vejamos uma servlet que ira colocar uma lista no
request:
String [] colecao = {"TDS", "TBD", "TIN", "TRC"};
request.setAttribute("cursos", colecao);
request.getRequestDispatcher("cadastraAluno.jsp").forward(
request , response);
Figura : fragmento da servlet
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 15 / 26
exemplo c:forEach
Agora a pagina cadastraAluno.jsp:
<p>cursos:
<c:forEach var="nome" items="${cursos}">
<label>
<input type="radio" name="curso" value="${nome}">${nome}
</ label> <br />
</c:forEach>
</p>
Figura : fragmento da pagina JSP
items: cole cao que sera percorrida
var: e o nome da variavel que armazena cada elemento da lista
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 16 / 26
exemplo c:forEach
Veja o mesmo exemplo, agora sendo vericado se ha elementos na lista:
<p>cursos:
<c:choose>
<c:when test="{not empty cursos}">
<ul>
<c:forEach var="nome" items="${cursos}">
<li>${nome} </ li>
</c:forEach>
</ ul>
</c:when>
<c:otherwise>
<h4>N~ao ha cursos!</ h4>
</c:otherwise>
</c:choose>
</p>
Figura : fragmento da pagina JSP
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 17 / 26
exemplo c:forEach - lista de objetos
Vamos montar uma pagina JSP que lista os advogados em uma tabela:
AdvocaciaBO negocio = new AdvocaciaBO ();
List<Advogado> lista = negocio.recuperaAdvogados ();
request.setAttribute("advogados", lista);
request.getRequestDispatcher("exibeAdvogados.jsp").forward(
request , response);
Figura : fragmento da servlet
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 18 / 26
exemplo c:forEach - lista de objetos
Agora, um fragmento da pagina exibeAdvogados.jsp:
<c:choose>
<c:when test="{not empty advogados}">
<table>
<caption>advogados </ caption>
<tr><th>nome </ th><th>oab </ th><th>ac~ ao </ th></ tr>
<c:forEach var="adv" items="${advogados}">
<tr>
<td>${adv.nome}</ td>
<td>${adv.oab}</ td>
<td><a href="alteraSetup?id=${adv.id}">altera </a></ td>
</ tr>
</c:forEach>
</ table>
</c:when>
<c:otherwise>
<h4>Nenhum advogado no sistema! </ h4>
</c:otherwise>
</c:choose>
Figura : fragmento da pagina JSP
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 19 / 26
exemplo c:url
Esta tag permite criar links com parametros. Vejamos um exemplo:
<c:url value="consulta" var="link">
<param name="email" value="${pessoa.email}" />
<param name="uf" value="${pessoa.uf}" />
</c:url>
<a href="${link}">busca </ a>
que resulta no seguinte codigo HTML quando voce manda exibir o
codigo fonte da pagina:
<a href="consulta?email=fulano@gmail.com&uf=SP">busca </a>
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 20 / 26
exemplo c:url
veja a tabela de advogados com o uso de <c:url>:
<table>
<caption>advogados </ caption>
<tr><th>nome </ th><th>oab </ th><th>ac~ ao </ th></ tr>
<c:forEach var="adv" items="${advogados}">
<tr>
<td>${adv.nome}</ td>
<td>${adv.oab}</ td>
<c:url value="alteraSetup" var="link">
<param name="id" value="${adv.id}"/>
</c:url>
<td><a href="${link}">altera </ a></ td>
</ tr>
</c:forEach>
</ table>
Figura : fragmento da pagina JSP
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 21 / 26
exemplo c:import
sobre a tag <c:import>:
insere o conte udo de uma pagina JSP dentro de outra pagina JSP
inclusao de conte udo xo dentro de sistemas: cabecalho, rodape,
menu, etc
pagina a ser inserida possui apenas codigos HTML
veja abaixo um exemplo:
<body>
<c:import url="cabecalho.jsp"> </c:import>
<h3>cadastra processo </ h3>
<form action="cadastra" method="post">
...
</ form>
</ body>
Figura : cadastraProcesso.jsp
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 22 / 26
exemplo c:import
cabe calho da pagina usando bootstrap:
<div class="navbar navbar -default">
<div class="container -fluid">
<div class="navbar -header">
<a class="navbar -brand" href="#">ADVOCACIA </a>
</ div>
<div class="collapse navbar -collapse">
<ul class="nav navbar -nav">
<li class="active">processo </ li>
<li>advogado </ li>
<li>cliente </ li>
</ ul>
</ div>
</ div>
</ div>
Figura : cabecalho.jsp
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 23 / 26
formatacao de data fmt:formatDate
exemplo de formatacao de data:
protected void doGet(HttpServletRequest request ,
HttpServletResponse response) ... {
request.setAttribute("agora", Calendar.getInstance ());
request.getRequestDispatcher("exibeData.jsp").forward(
request , response);
}
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"
%>
<html>
<body>
<fmt:formatDate value="${agora.time}" type="date" />
<fmt:formatDate value="${agora.time}" type="time" />
<fmt:formatDate value="${agora.time}" type="both" />
<fmt:formatDate value="${agora.time}" pattern="dd-MM -yyyy" />
</ body>
</ html>
Figura : exibeData.jsp
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 24 / 26
formatacao de valor fmt:formatNumber
exemplo de formatacao de valores numericos:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"
%>
<html>
<body>
<p>Valor monet ario:
<fmt:formatNumber value="${valor}" type="currency" />
</p>
<p>Valor percentual:
<fmt:formatNumber value="${valor}" type="percent" />
</p>
</ body>
</ html>
Figura : exibeNumeros.jsp
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 25 / 26
Exerccios
1) Refaca o cadastra processo usando EL e JSTL no lugar de
scriptlets e expressoes JSP.
2) Faca o cadastra advogado usando EL e JSTL no lugar de scriptlets
e expressoes JSP.
3) Refaca o cadastra aluno usando EL e JSTL no lugar de scriptlets e
expressoes JSP e inclua um cabe calho em todas as paginas deste
projeto.
4) Faca o Jogo da Forca usando EL e JSTL.
Eduardo Gondo (profeduardo@ap.com.br) DSW - Expression Language e JSTL 23 de setembro de 2014 26 / 26