Home JavaBeans, EL e JSTL
Post
Cancelar

JavaBeans, EL e JSTL

Evite o Uso de Código Java em JSP

• Apesar de JSPs terem sido criados para possibilitarem a mistura de HTML e código Java, escrever código Java em JSPs não é uma boa prática

– Dificulta o trabalho de web designers, que não são programadores

– Para páginas complexas, o código fica confuso

– Dificuldade de manutenção

Alternativas aos Scriptlets

• JavaBeans

• EL (Expression Language)

• JSTL (Java Server Pages Standard Tag Library)

JavaBeans

• É uma especificação Java que define um padrão de classe

• Uma classe é um JavaBean se:

– Possui um construtor público sem argumentos

– Possui métodos getters e/ou setters definidos corretamente

Assinatura dos Getters e Setters

• A assinatura dos getters e setters segue um padrão

AtributoGetterSetter
numContagetNumConta()setNumConta()
saldogetSaldo()setSaldo()
ativoisAtivo()setAtivo()

Para atributos booleanos, o padrão do getter é isXXX(), mas getXXX() também pode ser utilizado

Lendo as Propriedades do Bean

Servlet

1
2
3
4
5
6
7
...
ContaBancaria c = new ContaBancaria();
c.setNumConta("3245-3");
c.setSaldo(500.0);
c.setAtivo(true);
request.setAttribute("conta", c);
...

JSP

1
2
3
4
5
6
7
8
<jsp:useBean id="conta" class="model.ContaBancaria" scope="request" />
<html>
<body>
Núm. Conta: <jsp:getProperty name="conta" property="numConta" />
<BR>
Saldo: <jsp:getProperty name="conta" property="saldo" />
</body>
</html>

1
2
3
4
5
<jsp:useBean
  id="conta" 
  class="model.ContaBancaria" 
  scope="request"
/>

id: Nome pelo qual o bean será referenciado. Equivale ao nome do atributo.

class: Fully qualified name da classe do bean instanciada na memória.

scope: Escopo de onde o bean é carregado. O default é page.

Se o bean não existir, o <jsp:useBean> cria um novo bean

1
2
3
4
<jsp:getProperty
  name="conta" 
  property="numConta" 
/>

name: Nome do bean, definido pelo id em <jsp:useBean>.

property: Nome da propriedade para leitura. Será chamado o método getter correspondente (getNumConta()).

Alterando as Propriedades do Bean

• Além de ler as propriedades de um JavaBean, é possível também alterá-las

JSP

1
2
3
4
5
6
7
<jsp:useBean id="conta" class="model.ContaBancaria" scope="request" />
<jsp:setProperty name="conta" property="numConta" value="0000-0" />
<html>
<body>
Núm. Conta: <jsp:getProperty name="conta" property="numConta" />
</body>
</html>

1
2
3
4
5
<jsp:setProperty
  name="conta" 
  property="numConta"
  value="0000-0" 
/>

name: Nome do bean, definido pelo id em <jsp:useBean>.

property: Nome da propriedade que será alterada. Será chamado o método setter correspondente (setNumConta())

value: Novo valor para a propriedade do bean.

• É possível definir um <jsp:setProperty> dentro da tag <jsp:useBean>

– Neste caso as propriedades só serão alteradas se o bean estiver sendo criado pelo <jsp:useBean>

1
2
3
<jsp:useBean id="conta" class="model.ContaBancaria" scope="request">
  <jsp:setProperty name="conta" property="numConta" value="0000-0" /><!--O <jsp:setProperty> será ignorado caso o bean já exista na request-->
</jsp:useBean>

• A tag <jsp:setProperty> também pode ser usada para alterar propriedades de um bean de acordo com informações vindas da request

1
2
3
4
5
<form action="conta.jsp">
Núm Conta: <INPUT type="text" name="numConta"><BR>
Saldo: <INPUT type="text" name="saldo"><BR>
<INPUT type="submit" value="Processar">
</form>

conta.jsp

1
2
3
4
5
6
7
8
9
10
<jsp:useBean id="conta" class="model.ContaBancaria" scope="request" />
<jsp:setProperty name="conta" property="numConta" />
<jsp:setProperty name="conta" property="saldo" />
<html>
<body>
Núm. Conta: <jsp:getProperty name="conta" property="numConta" />
<BR>
Saldo: <jsp:getProperty name="conta" property="saldo" />
</body>
</html>

Se value não for definido, os parâmetros da request são pesquisados

• É possível buscar todos os parâmetros da request que possuem os nomes iguais às propriedades do bean

<jsp:setProperty name="conta" property="*" />

• Se o parâmetro da request e a propriedade do bean tiverem nomes diferentes, é possível usar param

<jsp:setProperty name="conta" property="numConta" param="nc" />

Expression Language

• EL permite ainda mais facilidade na hora de ler informações presentes em um escopo

Servlet request.setAttribute("user", "Carlos");

JSP ${user} O resultado é “Carlos”

EL e JavaBeans

• Ler propriedades de JavaBeans é muito mais fácil usando EL

Servlet

1
2
3
4
ContaBancaria conta = new ContaBancaria();
conta.setNumConta("1234-5");
conta.setSaldo(400.0);
request.setAttribute("c", conta);

JSP

1
2
${c.numConta}
${c.saldo}

O resultado é “1234-5” e “400.0”

• Além do operador “.”, existe o operador “[]”

${c.numConta} = ${c["numConta"]}

Operador “[]” e Coleções de Dados

• O operador “[]” pode ser usado na presença de coleções de dados

c é um java.util.List OU c é um array

1
2
${c[1]}
${c["1"]}

Retorna a segunda posição da lista/array

c é um java.util.Map

1
2
${c["Carlos"]}
${c.Carlos}

Retorna o valor do mapa cuja chave é “Carlos”

Limitações do Operador “.”

• O operador “.” só pode ser utilizado se o que estiver escrito do lado direito do operador for um identificador válido do Java

• Suponha que c é um java.util.Map:

1
2
3
4
${c.1}//Esta notação não funciona, pois "1" não é um identificador válido

${c[1]}//Esta notação funciona
${c["1"]} 

Objetos Implícitos

ObjetoDescrição
pageScopeMap com os atributos do escopo page
requestScopeMap com os atributos do escopo request
sessionScopeMap com os atributos do escopo session
applicationScopeMap com os atributos do escopo application
paramMap com os parâmetros da request
paramValuesMap com os parâmetros da request
headerMap com o request HTTP header
headerValuesMap com o request HTTP header
cookieMap com os cookies
initParamMap com os context init parameters
pageContextReferencia o objeto pageContext

JSTL

• JSTL é um conjunto de tag libraries que complementa as facilidades providas pela EL

– As tag libraries definem ações

– Substituem códigos Java nos arquivos JSP

• JSTL é bastante extensa

– Core library

– SQL library

– Formatting library

– XML library

Configurando o JSTL

• Para usar o JSTL na sua aplicação, são necessários dois arquivos JAR no classpath

jstl-api-XX.jar

jstl-impl-XX.jar

• Os arquivos podem ser encontrados na página do projeto do JSTL

– http://jstl.java.net

• É necessário referenciar a URI do JSTL para que você possa usar as taglibs

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

• Permite executar um loop em uma lista de elementos

Servlet

1
2
3
4
5
List<String> lista = new ArrayList<String>();
lista.add("laranja");
lista.add("leite");
lista.add("margarina");
request.setAttribute("listaCompras", lista);

JSP

1
2
3
4
5
6
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<table border="1">
<c:forEach var="item" items="${listaCompras}">
  <tr><td>${item}</td></tr><!--A variável só existe dentro da tag-->
</c:forEach>
</table>

• Permite testar uma determinada condição

Servlet request.setAttribute("valor", 100);

JSP

1
2
3
4
5
6
7
8
9
<c:if test="${valor > 50}">
  O valor é maior que 50!
</c:if>
<c:if test="${valor < 50}">
  O valor é menor que 50!
</c:if>
<c:if test="${valor == 50}">
  O valor é maior que 50!
</c:if>

, ,

• Testam diversas condições de forma agrupada

• Apenas um bloco é executado

Servlet request.setAttribute("tipoUsuario", "admin");

JSP

1
2
3
4
5
6
7
8
9
10
11
<c:choose>
  <c:when test="${tipoUsuario == 'admin'}">
    Bom dia, usuário administrador!
  </c:when>
  <c:when test="${tipoUsuario == 'gerente'}">
    Bom dia, usuário gerente!
  </c:when>
  <c:otherwise>
    Bom dia, usuário desconhecido!
  </c:otherwise>
</c:choose>

• Permite definir uma variável em um determinado escopo

JSP

1
2
<c:set var="cont" value="1" scope="request" /><!--O valor é fixo-->
<c:set var="cliente" value="${conta.cliente}" scope="session" /><!--O valor é lido a partir de um atributo-->

• Esta tag também pode ser usada para popular a propriedade de um bean

<c:set target="${conta}" property="numConta" value="1234-5" /> Bean - Propriedade - Valor

• E também de um java.util.Map

<c:set target="${clientes}" property="34" value="Carlos" /> java.util.Map - Chave - Valor

• Permite criar links

JSP

1
2
3
4
5
<c:url var="link" value="/ProcessarPedido">
  <c:param name="numPedido" value="${num}" />
  <c:param name="pago" value="false" />
</c:url>
<A href="${link}">Processar Pedido</A>
1
2
3
<A href="/app/ProcessarPedido?numPedido=30&pago=false">
Processar Pedido
</A>

• O JSTL é um conjunto amplo de tag libraries

• Para maiores informações, consulte a documentação no site oficial

Baseado nos cursos da Softblue

Esta postagem está licenciada sob CC BY 4.0 pelo autor.