JSP Langage d'expression
Le langage d'expression JSP (EL) rend très simple l'accès aux données stockées dans les JavaBeans. JSP EL peut être utilisé pour créer à la fois des expressions arithmétiques et des expressions logiques. Dans les expressions JSP EL, vous pouvez utiliser des entiers, des nombres à virgule flottante, des chaînes de caractères, les constantes true et false, ainsi que null.
Une syntaxe simple
Généralement, lorsque vous devez spécifier la valeur d'un attribut dans une balise JSP, vous utilisez simplement une chaîne de caractères :
<jsp:setProperty name="box" property="perimeter" value="100"/>
JSP EL vous permet de spécifier une expression pour représenter la valeur d'un attribut. Une syntaxe d'expression simple est la suivante :
${expr}
Ici, expr fait référence à l'expression. Les opérateurs courants dans JSP EL sont.et{}. Ces deux opérateurs vous permettent d'accéder à diverses propriétés JavaBean via des objets JSP intégrés.
Par exemple, la balise <jsp:setProperty> ci-dessus peut être réécrite à l'aide du langage d'expression comme suit :
<jsp:setProperty name="box" property="perimeter"
value="${2*box.width+2*box.height}"/>
Lorsque le compilateur JSP rencontre le format "${}" dans un attribut, il génère du code pour évaluer cette expression et produit un substitut pour remplacer la valeur de l'expression.
Vous pouvez également utiliser le langage d'expression dans le texte de modèle des balises. Par exemple, la balise <jsp:text> insère simplement le texte de son corps dans la sortie JSP :
<jsp:text> <h1>Hello JSP!</h1> </jsp:text>
Maintenant, utilisez une expression dans le corps de la balise <jsp:text>, comme ceci :
<jsp:text>
Box Perimeter is: ${2*box.width + 2*box.height}
</jsp:text>
Les parenthèses peuvent être utilisées dans les expressions EL pour regrouper des sous-expressions. Par exemple, ${(1 + 2) * 3} est égal à 9, mais ${1 + (2 * 3)} est égal à 7.
Pour désactiver l'évaluation des expressions EL, vous devez utiliser la directive page pour définir la valeur de l'attribut isELIgnored sur true :
<%@ page isELIgnored ="true|false" %>
De cette façon, les expressions EL seront ignorées. Si elle est définie sur false, le conteneur évaluera les expressions EL.
Opérateurs de base en EL
Les expressions EL prennent en charge la plupart des opérateurs arithmétiques et logiques fournis par Java :
| Operator | Description |
|---|---|
| . | Accéder à une propriété de Bean ou à une entrée de map |
| [] | Accéder à un élément d'un tableau ou d'une liste |
| ( ) | Regrouper une sous-expression pour modifier la priorité |
| + | ajoutez |
| - | Soustraction ou moins unaire |
| * | multiply |
| / ou div | divide |
| % ou mod | Modulo |
| == ou eq | Test d'égalité |
| != ou ne | Test d'inégalité |
| < ou lt | Test d'infériorité |
| > ou gt | Test de supériorité |
| <= ou le | Test d'infériorité ou d'égalité |
| >= ou ge | Test pour supérieur ou égal à |
| && ou and | Test du ET logique |
| || ou or | Test du OU logique |
| ! ou not | Test du NON logique |
| empty | Test de valeur vide |
Fonctions dans JSP EL
JSP EL vous permet d'utiliser des fonctions dans les expressions. Ces fonctions doivent être définies dans des bibliothèques de balises personnalisées. La syntaxe d'utilisation d'une fonction est la suivante :
${ns:func(param1, param2, ...)}
ns fait référence à l'espace de noms, func fait référence au nom de la fonction, param1 fait référence au premier paramètre, param2 fait référence au deuxième paramètre, et ainsi de suite. Par exemple, il existe une fonction fn:length, définie dans la bibliothèque JSTL, qui peut être utilisée pour obtenir la longueur d'une chaîne comme suit :
${fn:length("Get my length")}
Pour utiliser les fonctions de n'importe quelle bibliothèque de balises, vous devez installer ces bibliothèques sur le serveur, puis les inclure dans les fichiers JSP à l'aide de la balise <taglib>.
Objets implicites de JSP EL
JSP EL prend en charge les objets implicites répertoriés dans le tableau suivant :
| Objet implicite | Description |
|---|---|
| pageScope | Portée de page |
| requestScope | Portée de requête |
| sessionScope | Portée de session |
| applicationScope | Portée d'application |
| param | Paramètres de l'objet Request, String |
| paramValues | Paramètres de l'objet Request, collection de String |
| header | En-tête HTTP, String |
| headerValues | En-tête HTTP, collection de String |
| initParam | Paramètres d'initialisation du contexte |
| cookie | Valeurs de cookie |
| pageContext | Le pageContext de la page actuelle |
Vous pouvez utiliser ces objets dans les expressions exactement comme des variables. Plusieurs exemples seront donnés ci-après pour mieux comprendre ce concept.
L’objet pageContext
L’objet pageContext est une référence à l’objet pageContext dans JSP. Grâce à l’objet pageContext, vous pouvez accéder à l’objet request. Par exemple, pour accéder à la chaîne de requête transmise par l’objet request, procédez comme ceci :
${pageContext.request.queryString}
Objets de portée
Les variables pageScope, requestScope, sessionScope et applicationScope sont utilisées pour accéder aux variables stockées à différents niveaux de portée.
Par exemple, si vous devez accéder explicitement à la variable box dans la couche applicationScope, vous pouvez y accéder comme ceci : applicationScope.box.
Les objets param et paramValues
Les objets param et paramValues servent à accéder aux valeurs des paramètres en utilisant la méthode request.getParameter et la méthode request.getParameterValues.
Par exemple, pour accéder à un paramètre nommé order, vous pouvez utiliser l’expression : ${param.order}, ou ${param["order"]}.
L’exemple suivant montre comment accéder au paramètre username dans la requête :
<%@ page import="java.io.*,java.util.*" %>
<%
String title = "Accessing Request Param";
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>${param["username"]}</p>
</div>
</body>
</html>
L’objet param renvoie une seule chaîne, tandis que l’objet paramValues renvoie un tableau de chaînes.
Les objets header et headerValues
Les objets header et headerValues sont utilisés pour accéder aux en-têtes en utilisant la méthode request.getHeader et la méthode request.getHeaders.
Par exemple, pour accéder à un en-tête nommé user-agent, vous pouvez utiliser l'expression : ${header.user-agent}, ou ${header["user-agent"]}.
L'exemple suivant montre comment accéder à l'en-tête user-agent :
<%@ page import="java.io.*,java.util.*" %>
<%
String title = "User Agent Example";
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>${header["user-agent"]}</p>
</div>
</body>
</html>
La sortie est la suivante :
L'objet header renvoie une valeur unique, tandis que headerValues renvoie un tableau de chaînes de caractères.
Autres extensions