Outils pour utilisateurs

Outils du site


helloworld_web_java_el

Ceci est une ancienne révision du document !


Nécessite l'installation de la librairie JSTL (bien installer les 2 parties API et Implementation).

Les EL permettent de réaliser des opérations arithmétiques et logiques simples ainsi que l'accès et la modification de propriétés des Bean Java. L'objectif est aussi de ne plus utiliser de scriptlets.

<note important> Il sera présenté l'utilisation de la JSTL et des EL pour JSP et JSF. Il convient donc de bien vérifier que le code correspond bien à la technologie utilisée. </note>

Préparation du projet

Nécessite un projet de type Dynamic Web Project. Une fois le projet créé ainsi qu'au minimum un Bean (ici BeanPersonne), il faut choisir entre travailler avec des fichiers .jsp ou .xhtml. Le format .jsp est exclusivement pour travailler avec des JSP (JavaServer Pages) et JSF 1.2 (JavaServer Faces) alors que le format .xhtml est compatible JSP mais nécessite les JSF 2.0 (et donc d'activer les JSF dans le projet). Enfin ajoutez le fichier au format choisi via File|New|Other, puis Web/JSP File ou Web/HTML et validez.

Entête de base

  • Ensuite, il faut déclarer les entêtes JSP :
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  • ou au format xhtml :
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:c="http://java.sun.com/jsp/jstl/core"
  xmlns:h="http://java.sun.com/jsf/html">

EL sans Java

Une expression language se déclare avec le symbole ${…}. Par exemple :

Il est à noter que les EL ne permettent pas l'utilisation de if-then-else. Cependant, il est possible d'utiliser un équivalent au case-switch-default :

index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Titre</title>
</head>
<body>
  <p>
    <c:if test="${15 % 2 == 0}">
      <c:out value="15 est un nombre pair."></c:out>
    </c:if>
    <c:if test="${15 % 2 == 1}">
      <c:out value="15 est un nombre impair."></c:out>
    </c:if>
    <br />
    <c:choose>
      <c:when test="${16 % 2 == 0}">
        <c:out value="16 est un nombre pair."></c:out>
      </c:when>
      <c:otherwise>
        <c:out value="16 est un nombre impair."></c:out>
      </c:otherwise>
    </c:choose>
  </p>
</body>
</html>

c:out n'est compatible qu'avec des fichiers JSP. Dans le cas de fichier xhtml, il est nécessaire d'utiliser h:outputText à la place.

index.xhtml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:c="http://java.sun.com/jsp/jstl/core"
  xmlns:h="http://java.sun.com/jsf/html">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>Insert title here</title>
</head>
<body>
  <p>
    <c:if test="${15 % 2 == 0}">
      <h:outputText value="15 est un nombre pair."></h:outputText>
    </c:if>
    <c:if test="${15 % 2 == 1}">
      <h:outputText value="15 est un nombre impair."></h:outputText>
    </c:if>
    <br />
    <c:choose>
      <c:when test="${16 % 2 == 0}">
        <h:outputText value="16 est un nombre pair."></h:outputText>
      </c:when>
      <c:otherwise>
        <h:outputText value="16 est un nombre impair."></h:outputText>
      </c:otherwise>
    </c:choose>
  </p>
</body>
</html>

Objets implicites

Les objets implicites sont (Source, Archive) :

  • pageContext : Accès à l'objet PageContext de la page JSP.
  • pageScope : Map permettant d'accéder aux différents attributs du scope 'page'.
  • requestScope : Map permettant d'accéder aux différents attributs du scope 'request'.
  • sessionScope : Map permettant d'accéder aux différents attributs du scope 'session'.
  • applicationScope : Map permettant d'accéder aux différents attributs du scope 'application'.
  • param : Map permettant d'accéder aux paramètres de la requête HTTP sous forme de String.
  • paramValues : Map permettant d'accéder aux paramètres de la requête HTTP sous forme de tableau de String.
  • header : Map permettant d'accéder aux valeurs du Header HTTP sous forme de String.
  • headerValues : Map permettant d'accéder aux valeurs du Header HTTP sous forme de tableau de String.
  • cookie : Map permettant d'accéder aux différents Cookies.
  • initParam : Map permettant d'accéder aux init-params du web.xml.

Manipulation des Beans

  • Pour les JSP, il est possible d'instancier plusieurs variables d'une même classe, de modifier leurs attributs et de les afficher. Il n'est pas nécessaire de définir la classe comme ManagedBean ou ses méthodes comme ManagedProperty que ce soit par annotation ou par le fichier faces-config.xml.
index2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
  <jsp:useBean id="perso1" scope="session" class="com.llgc.BeanPersonne">
    <jsp:setProperty property="taille" name="perso1" value="170" />
  </jsp:useBean>
  <jsp:setProperty property="yeuxBleus" name="perso1" value="true" />
  <jsp:useBean id="perso2" scope="session" class="com.llgc.BeanPersonne">
    <jsp:setProperty property="taille" name="perso2" value="160" />
  </jsp:useBean>
  <jsp:setProperty property="yeuxBleus" name="perso2" value="false" />
    <p>
    La personne 1 possède une taille de ${sessionScope.perso1.taille} cm et
    <c:if test="${!perso1.yeuxBleus}">
      n'a pas
    </c:if>
    <c:if test="${perso1.yeuxBleus}">
      <c:out value="a" />
    </c:if>
    les yeux bleus.<br />
    La personne 2 possède une taille de ${perso2.taille} cm et
    <c:if test="${!perso2.yeuxBleus}">
      n'a pas
    </c:if>
    <c:if test="${perso2.yeuxBleus}">
      <c:out value="a" />
    </c:if>
    les yeux bleus.
  </p>
</body>
</html>
  • Sous JSF, il n'est possible d'instancier un Bean qu'une seule fois. Par exemple, ci-dessous un exemple pour travailler avec le BeanPersonne, le modifier et l'afficher.

<note important>Notez la majuscule au début du Bean dans <c:set target=“${BeanPersonne}” et son absence dans ${beanPersonne.taille}. En effet, dans l'un, on travaille avec la classe, dans l'autre, son unique instanciation.</note>

index2.xhtml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:c="http://java.sun.com/jsp/jstl/core"
  xmlns:h="http://java.sun.com/jsf/html">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>Insert title here</title>
</head>
<body>
  <c:set target="${BeanPersonne}" property="taille" value="170" />
  <c:set target="${BeanPersonne}" property="yeuxBleus" value="true" />
  <p>
    La personne possède une taille de ${beanPersonne.taille} cm et
    <c:if test="${beanPersonne.yeuxBleus}">
      <h:outputText value="a" />
    </c:if>
    <c:if test="${!beanPersonne.yeuxBleus}">
    n'a pas
    </c:if>
    les yeux bleus.
  </p>
</body>
</html>

Il est nécessaire de déclarer le Bean comme ManagedBean (javax.faces.bean) et ces attributs ManagedProperty.

BeanPersonne.java
package com.llgc;
 
import java.util.Arrays;
 
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
 
@ManagedBean
public class BeanPersonne
{
  @ManagedProperty(value="#{taille}")
  private int taille = 150;
  @ManagedProperty(value="#{yeuxBleus}")
  private boolean yeuxBleus = false;
  @ManagedProperty(value="#{diplomes}")
  private int[] diplomes = null;
 
  public int getTaille ()
  {
    return taille;
  }
 
  public void setTaille (int taille)
  {
    this.taille = taille;
  }
 
  public boolean isYeuxBleus ()
  {
    return yeuxBleus;
  }
 
  public void setYeuxBleus (boolean yeuxBleus)
  {
    this.yeuxBleus = yeuxBleus;
  }
 
  public int[] getDiplomes ()
  {
    return diplomes;
  }
 
  public void setDiplomes (int[] diplomes)
  {
    this.diplomes = diplomes;
  }
 
  public int getDiplomes (int index)
  {
    return diplomes[index];
  }
 
  public void setDiplomes (int index, int diplome)
  {
    this.diplomes[index] = diplome;
  }
 
  @Override
  public String toString ()
  {
    return "BeanPersonne [taille=" + taille + ", yeuxBleus=" + yeuxBleus + ", diplomes=" + Arrays.toString (diplomes)
        + "]";
  }
}

Les Beans et les formulaires

L'utilisation la plus courante des Beans et des EL est certainement celui des formulaires pour mémoriser les valeurs des champs d'une page à l'autre (scope session).

helloworld_web_java_el.1438153634.txt.gz · Dernière modification : de root