Skip to content

Expression Language

Introduction

Le langage d'expression des pages JSP nous permet d'accéder plus facilement aux différentes données disponible sur notre page JSP. Il nous permet d’écrire des évaluations qui seront évaluées dynamiquement lors de l’exécution de la page JSP. Il nous permet d’accéder à :

  • Une variable.
  • Une propriété d’un objet Java.
  • L’appel d’une méthode d'un objet.
  • L’évaluation d’une expression.

La syntaxe du langage d’expression utilise le format ${…} pour ses différentes utilisations. Par exemple:

  • Variable : ${nomVariable}
  • Propriété d’un objet : ${objet.propriété}
  • Méthode : ${objet.methode()}
  • Expression : ${expression}

La protée des variables

Il est important de comprendre et faire attention à la portée des variables lors de l'utilisation du langage d'expression. Une expression ${...} cherchera pour la variable mentionnée dans les portées suivantes.

graph LR
A[page] --> B[request] --> C[session] --> D[application]

Il faut donc faire attention si des objets portent le même nom mais se retrouvent dans deux portées différentes. Pour récupérer une variable dans une portée spécifique, il faudra le spécifier de façon explicite.

Par exemple:

  • ${requestScope.user} cherche dans l'objet request
  • ${sessionScope.user} cherche dans l'objet session
Exemple

Prenez par exemple le servlet et la page suivante:

Le servlet

@WebServlet(name = "ContextServlet", value = "/ServletContexte")
public class ServletContexte extends HttpServlet {
    Produit p1 = new Produit(1, "Produit requête", 20.00f, true);
    Produit p2 = new Produit(1, "Produit session", 20.00f, true);

    public void doGet(HttpServletRequest request , HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession(true);
        session.setAttribute("produit", p2);
        request.setAttribute("produit", p1);
        request.getRequestDispatcher("contexte.jsp").forward(request, response);
    }
}

La page JSP (contexte.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Contexte</title>
</head>
<body>
    <p>Produit : ${produit.nom}</p>
    <p>Produit : ${produit.nom}</p>
</body>
</html>
  • Tentez de prédire l'affichage sur la page
  • Assurez-vous d'être en mesure d'afficher les deux produits différents.