EL (Expression Language) em Páginas JSP
EL é uma linguagem de expressão que simplifica o acesso a dados em páginas JSP, permitindo manipulação eficiente de informações sem código Java extenso.
Funcionalidades Principais
- Acesso direto a objetos de escopo como pageContext, request, session e application.
- Recuperação de parâmetros enviados pelo cliente.
- Manipulação de propriedades em objetos JavaBean.
- Iteração e acesso a elementos em coleções.
- Avaliação de expressões simples para saída de dados.
Trabalhando com Dados de Escopo
Em vez de usar scriptlets como <%=request.getAttribute("variavel")%>, EL oferece uma sintaxe concisa: ${variavel}.
Lidando com Parâmetros de Requisição
EL fornece objetos implícitos para acessar parâmetros:
${param.nome_usuario}
${paramValues.interesses[2]}
Acessando Propriedades de Beans
Duas abordagens disponíveis:
${objeto.propriedade}— por exemplo,${cliente.endereco}${objeto["propriedade"]}— útil para nomes com caracteres especiais ou acesso dinâmico.
Exemplo de acesso dinâmico:
<%
request.setAttribute("atributo_dinamico", "idade");
%>
${pessoa[atributo_dinamico]}
Trabalhando com Coleções
Para uma lista de produtos:
${produtos[3].preco}
Operadores em EL
EL suporta operadores para cálculos e comparações.
Operador condicional:
${condicao ? "resultado_verdadeiro" : "resultado_falso"}
Verificação de valores vazios:
${empty expressao}
JSTL (JSP Standard Tag Library)
JSTL é uma coleção de tags que elimina a necessidade de código Java em páginas JSP, promovendo manutenção mais fácil e código mais limpo.
Configuração Inicial
Adicione as bibliotecas JSTL ao projeto e declare a taglib na página JSP:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Tags Principais do JSTL Core
- c:out: Exibe conteúdo de forma segura.
- c:set: Define ou atualiza atributos em escopos.
- c:remove: Remove atributos de escopos.
- c:if: Avalia condições simples.
- c:choose: Suporta múltiplas condições com fallback.
- c:forEach: Itera sobre coleções ou intervalos.
Exemplos Práticos
<out default="Nenhuma mensagem" value="${mensagem_erro}"></out>
<set scope="session" value="${valor}" var="total_pedidos"></set>
<if test="${autenticado}">
<p>Usuário autenticado: ${perfil.email}</p>
</if>
<choose>
<when test="${pontuacao >= 90}">
<p>Nível: Avançado</p>
</when>
<when test="${pontuacao >= 70}">
<p>Nível: Intermediário</p>
</when>
<otherwise>
<p>Nível: Básico</p>
</otherwise>
</choose>
<foreach items="${lista_dados}" var="elemento" varstatus="status">
<div>Item ${status.count}: ${elemento.descricao}</div>
</foreach>
Tags para Funções e Formatação
JSTL inclui bibliotecas adicionais para operações utilitárias:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
Criando Tags Personalizadas
Para necessidades específicas, desenvolvedores podem implementar tags customizadas:
- Desenvolva uma classe que estenda
SimpleTagSupporte implemente o métododoTag. - Crie um arquivo TLD (Tag Library Descriptor) no diretório
WEB-INF. - Registre a taglib na página JSP para utilização.
Exemplo de classe de tag personalizada:
public class TagExibicao extends SimpleTagSupport {
private String mensagem;
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
@Override
public void doTag() throws JspException, IOException {
JspWriter saida = getJspContext().getOut();
saida.write("Tag personalizada: " + mensagem);
}
}
Configuração no arquivo TLD:
<tag>
<name>tagExibicao</name>
<tag-class>com.projeto.tags.TagExibicao</tag-class>
<body-content>empty</body-content>
<attribute>
<name>mensagem</name>
<required>true</required>
</attribute>
</tag>
Utilização em uma página JSP:
<%@ taglib prefix="custom" uri="http://meusite.com/tags" %>
<tagexibicao mensagem="Olá, mundo!"></tagexibicao>