Vous êtes sur la page 1sur 13

Institut Supérieur De Gestion De Tunis cours AJEE

3ème LFIG BAYOUDHI Chaouki

Les Marqueurs JSF 2.0

I- La bibliothèque standard de marqueurs JSP (JSTL) :


JSTL est un ensemble de marqueurs standard permettant d’éviter le mélange du
code Java et des marqueurs XHTML : grâce â elle, vous pouvez manipuler les données
dynamiques contenues dans une JSP en utilisant des marqueurs XML au lieu de
passer par du code Java.
Les actions possibles vont de l’affectation d’une valeur à un objet à la capture des
exceptions en passant par le contrôle avec des conditions et des itérations et par
l’accès aux bases de données.
Une bibliothèque de marqueurs est une collection de fonctions pouvant être utilisées
dans une page JSP ou JSF.
Ci-dessous une énumération de ces fonctions, les URI permettant de référencer les
bibliothèques et les préfixes associés (ce sont ceux que l’on utilise le plus souvent,
mais ils peuvent être modifiés).

Bibliothèques de marqueurs JSTL :

Domaine URI Préfixe


Noyau http://java.sun.com/jsp/jstl/core c
Traitement XML http://java.sun.com/jsp/jstl/xml x
T18N et formatage http://java.sun.com/jsp/jstl/fmt fmt
Accès aux BD http://java.sun.com/jsp/jstl/sql sql
Fonctions http://java.sun.com/jsp/jstl/functions fn

Remarque :
Avant de pouvoir utiliser ces actions, la JSP doit importer l’URI de la bibliothèque
et choisir un préfixe, soit en utilisant une directive JSP avec le système de
marqueurs de JSP, soit en utilisant une syntaxe XML :
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
// ou
<jsp:root xmlns:jsp=”http://java.sun.com/JSP/Page”
xmlns:c="http://java.sun.com/jstl/core" version=”1.2”>

Avec cette déclaration, vous pouvez ensuite utiliser toutes les actions de la
biblio- thèque des marqueurs fondamentaux en utilisant le préfixe c :
<c:set var=”upperLimit” value=”20”/>
Ce code initialise la variable upperLimit avec la valeur 20.

1
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki

1. Actions fondamentales :
Les actions fondamentales, énumérées ci-dessous, fournissent des marqueurs pour
manipuler des variables, traiter les erreurs, effectuer des tests et exécuter des boucles
et des itérations.

Action Description
<c:out> Évalue une expression et affiche son résultat.
<c:set> Initialise la valeur d’un objet.
<c:remove> Supprime une variable.
<c:catch> Capture une exception java.lang.Throwable lancée par
l’une de ses actions imbriquées.
<c:if> Teste si une expression est vraie.
<c:choose> Fournit plusieurs alternatives exclusives.
<c:when> Représente une alternative dans une action <c:choose>.
<c:otherwise> Représente la dernière alternative d’une action <c:choose>.
<c:forEach> Répète son corps pour chaque élément d’une collection ou un
nombre fixé de fois.
<c:forTokens> Itère sur une liste de tokens (lexèmes) séparés par des virgules.
<c:import> Importe une ressource.
<c:url> Encode une URL.
<c:param> Ajoute des paramètres de requête â une URL.
<c:redirect> Redirige vers une URL précise.

Exemple :
Une JSP qui boucle sur les nombres de 3 â 15 en affichant, pour chacun d’eux, s’il est
pair ou impair.

<jsp:root xmlns:jsp=”http://java.sun.com/JSP/Page”
xmlns:c="http://java.sun.com/jstl/core"
version=”1.2”>
<html>
<body>
<c:set var=”upperLimit” value=”20”/>
<c:forEach var=”i” begin=”3” end=”${upperLimit – 5}”>

<c:choose>
<c:when test=”${i%2 == 0}”>
<c:out value=”${i} is even”/><br/>
</c:when>
<c:otherwise>
<c:out value=”${i} is odd”/><br/>
</c:otherwise>
</c:choose>

</c:forEach>
</body>
</html> 2
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki

Pour utiliser la bibliothèque des marqueurs fondamentaux, la page doit importer son
URI avec un préfixe. Puis elle affecte la valeur 20 à la variable upperLimit à
l’aide du marqueur <c:set> et itère sur tous les nombres compris entre 3 et 15 (nous
avons volontairement ajouté une expression arithmétique ${upperLimit – 5}).
La valeur de l’indice (la variable i) est testée à chaque tour de boucle pour savoir
si elle est paire ou impaire (<c:when test=”${i%2 == 0}”>).
Le marqueur <c:out> affche ensuite la valeur de l’indice, accompagnée du texte
“est pair“ ou “est impair“.
Vous pouvez remarquer que tout le traitement s’effectue grâce aux marqueurs, que
cette page est conforme â XML et qu’elle peut être comprise par les développeurs
qui ne connaissent pas Java.

2. Actions de formatage :
Les actions de formatage, énumérées ci-dessous, permettent de formater des dates,
des nombres, des valeurs monétaires et des pourcentages. Vous pouvez aussi obtenir
ou modifier les locales (variables de langue) et les zones horaires et obtenir
l’encodage de la page web.

Action Description
<fmt:message> Tnternationalise une JSP en extrayant un
message en fonction de la langue.
<fmt:param> Fournit un paramètre â <fmt:message>.
<fmt:bundle> Tndique le paquetage contenant les messages par langue.
<fmt:setLocale> Fixe la langue â utiliser.
<fmt:requestEncoding> Fixe l’encodage des caractères de la requête.
<fmt:timeZone> Précise la zone horaire du format de l’heure.
<fmt:setTimeZone> Stocke la zone horaire indiquée dans une variable.
<fmt:formatNumber> Formate une valeur numérique (nombre,
monnaie, pourcentage) selon la locale.

<fmt:parseNumber> Analyse la représentation textuelle des nombres, des


valeurs monétaires et des pourcentages.
<fmt:formatDate> Formate les dates et les heures selon la langue.
<fmt:parseDate> Analyse la représentation textuelle des dates et des heures.

Exemple :
<%@ page contentType=”text/html;charset=UTF-8”language=”java”
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"
prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"
prefix="fmt" %>
<html>
<body> Dates :
<c:set var=”now” value=”<%=new java.util.Date()%>”/>
3
<fmt:formatDate type=”time” value=”${now}”/>
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki

<fmt:formatDate type=”date” value=”${now}”/>


<fmt:formatDate type=”both” dateStyle=”short” timeStyle=”short”
value=”${now}”/>
<fmt:formatDate type=”both” dateStyle=”long” timeStyle=”long”
value=”${now}”/>

Currency :
<fmt:setLocale value=”en_us”/>
<fmt:formatNumber value=”20.50” type=”currency”/>
<fmt:setLocale value=”en_gb”/>
<fmt:formatNumber value=”20.50” type=”currency”/>
</body>
</html>

La page importe les bibliothèques des marqueurs fondamentaux et de formatage à


l’aide de directives <%@ taglib>.
La ligne <c:set var=”now” value=”<%=new java. util.Date()%>”/> initialise la
variable now avec la date courante, et le marqueur <fmt:formatDate> la
formate selon différents critères : uniquement l’heure, uniquement la date et les
deux ensemble.
La ligne <fmt:setLocale value=”en_us”/> fixe la langue américaine et formate
la valeur monétaire 20.50 pour obtenir $20.50. La locale est ensuite modifiée pour
la Grande-Bretagne afin que cette valeur soit exprimée en livres sterling.

3. Actions SQL :
Les actions SQL de la JSTL permettent d’effectuer des requêtes sur une base de
données (insertions, modifications et suppressions), d’accéder aux résultats de ces
requêtes et même de mettre en place un contexte transactionnel. Nous avons déjâ vu
comment accéder â une base de données avec les entités JPA et les EJB mais, pour
des applications spécifiques, on a parfois besoin d’accéder â une base â partir d’une
page web (pour une application web d’administration non critique utilisée
occasionnellement par un unique utilisateur, par exemple) : dans ce cas, les
marqueurs de la bibliothèque SQL peuvent se révéler utiles.
Action Description
<sql:query> Interroge une base de données.
<sql:update> Exécute une instruction SQL INSERT, UPDATE ou
DELETE.
<sql:transaction> Établit un contexte transactionnel pour les marqueurs
<sql:query> et
<sql:update>.
<sql:setDataSource> Indique la source de données.

<sql:param> Fixe les valeurs des marqueurs d’emplacements


d’une instruction SQL.
<sql:dateParam> Fixe les valeurs des marqueurs d’emplacements
d’une instruction SQL pour les valeurs de type
java.util.Date.
4
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki

La page JSP ci-dessous accède à une base de données, récupère toutes les lignes de
la table Livre et les affiche.

<%@ page contentType=”text/html;charset=UTF-8”


language=”java” %>
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core”
prefix=”c” %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql"
prefix="sql" %>
<html>
<head>
<title>Tous Les Livres</title>
</head>
<body>
<h1>Liste de Livre</h1>
<hr/>
<sql:setDataSource dataSource="jdbc/ default"/>
<sql:query var="lstLvs">
select * from livre
</sql:query>

<table border=”1”>
<tr>
<td>code</td>
<td>Title</td>
<td>Prix</td>
<td>Description</td>
<td>Nombre de pages</td>
<td>Illustrations</td>
</tr>
<c:forEach var=”row” items=”${lstLvs.rows}”>
<tr>
<td><c:out value=”${row.code}”/></td>
<td><c:out value=”${row.title}”/></td>
<td><c:out value=”${row.prix}”/></td>
<td><c:out value=”${row.description}”/></td>
<td><c:out value=”${row.nbPage}”/></td>
<td><c:out value=”${row.illustrations}”/></td>
</tr>
</c:forEach>
</table>
<hr/>
</body>
</html>
Cette JSP doit d’abord importer la bibliothèque sql avec une directive <%@
taglib> puis indiquer la source de données (ici, la source par défaut jdbc/
default fournie avec GlassFish).

5
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki

Le résultat de l’exécution de la requête select * from Livre est stocké dans


la variable lstLvs et toutes les lignes obtenues se trouvent dans la collection
lstLvs.rows, que l’on parcourt avec le marqueur <c:forEach>.

4. Les Fonctions :
Les fonctions ne sont pas des marqueurs mais sont quand même définies
dans la spécification JSTL. Elles peuvent être utilisées avec EL et sont
principalement employées pour traiter les chaînes de caractères :
${fn:contains(”H2G2”, ”H2”)}
Ce code teste si une chaîne contient une sous-chaîne particulière : ici, cet appel
renverra true car H2G2 contient H2.
L’appel suivant renvoie la longueur d’une chaîne ou d’une collection : dans cet
exemple précis son résultat sera 4.
${fn:length(”H2G2”)}
Une JSP peut afficher les résultats des fonctions (avec un marqueur <c:out>)
ou les utiliser dans un test ou une boucle.
Exemple :
<%@ page contentType=”text/html;charset=UTF-8”language=”java”
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"
prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fn" prefix="fn"
%>
<html>
<body>
<c:out value=”${fn:toLowerCase(sentence)}”/>
<c:if test=”${fn:length(’H2G2’)
== 4}”> H2G2 is four
caracters long
</c:if>
</body>
</html>

Fonction Description
fn:contains Teste si une chaîne contient la sous-chaîne indiquée.
fn:containsIgnoreCase Idem, sans tenir compte de la casse.
fn:endsWith Teste si une chaîne se termine par le suffixe indiqué.
fn:escapeXml Protège les caractères pouvant être interprétés comme du
XML. fn:indexOf Renvoie l’indice de la première occurrence d’une sous-
chaîne dans une chaîne.
fn:join Joint tous les éléments d’un tableau pour former une chaîne.
fn:length Renvoie le nombre d’éléments d’une collection ou le
nombre de caractères d’une chaîne.

6
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki

fn:replace Renvoie une chaîne où toutes les occurrences de la


sous- chaîne indiquée ont été remplacées par une
autre chaîne.
fn:split Découpe une chaîne pour obtenir un tableau de sous-
chaînes.
fn:startsWith Teste si une chaîne commence par le préfixe indiqué.

fn:substring Renvoie une sous-chaîne.


fn:substringAfter Renvoie la sous-chaîne située après la sous-chaîne
indiquée.
fn:substringBefore Renvoie la sous-chaîne située avant la sous-chaîne
indiquée.
fn:toLowerCase Convertit une chaîne en minuscules.
fn:toUpperCase Convertit une chaîne en majuscules.
fn:trim Supprime les espaces aux deux extrémités d’une chaîne.

II- Les Marqueurs JSF :


1. Le PDL Facelets :

Lorsque JSF a été créé, le but consistait â réutiliser JSP comme PDL principal car
elle faisait déjà partie de Java EE. JSP utilisait EL et JSTL et l’idée consistait donc
â réutiliser toutes ces technologies avec JSF.
JSP est un langage de page et JSF, une couche de composants située au-dessus.
Cependant, les cycles de vie de JSP et de JSF ne s’accordent pas. Pour produire
une réponse, les marqueurs de JSP sont traités de haut en bas, dans l’ordre où ils
apparaissent ; alors que le cycle de vie de JSF est un peu plus compliqué puisque la
production de l’arborescence des composants et leur traitement ont lieu dans des
phases différentes.
Facelets entre donc en jeu pour correspondre au cycle de vie des JSF.
Facelets est une alternative open-source à JSP. À la différence de JSP, EL et JSTL,
Facelets n’a pas de JSR et ne fait pas partie de Java EE : c’est un remplaçant de JSP
qui fournit une alternative XML (XHTML) pour les pages d’une application JSF.
Facelets ayant été conçu en tenant compte de JSF, il fournit un modèle de
programmation plus simple que celui de JSP.
Facelets dispose d’une bibliothèque de marqueurs permettant d’écrire l’interface
utilisateur et reconnaît en partie les marqueurs JSTL. Bien que la bibliothèque de
fonctions soit intégralement disponible, seuls quelques marqueurs fondamentaux
(c:if, c:forEach, c:catch et c:set) sont reconnus. La caractéristique essentielle
de Facelets est son mécanisme de templates de pages, qui est bien plus souple que
celui de JSP. Il permet également de créer des composants personnalisés utilisables
dans le modèle arborescent de JSF.
La bibliothèque des marqueurs Facelets est définie par l’URI http://java.sun.
com/jsf/facelets et utilise généralement le préfixe ui.

7
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki

Marqueurs Facelets :

Marqueur Description
<ui:composition> Défnit une composition qui utilise éventuellement un
template.
Plusieurs compositions peuvent utiliser le même template.
<ui:component> Crée un composant.
<ui:debug> Capture les informations de débogage.
<ui:define> Défnit le contenu inséré dans une page par un Template.

<ui:decorate> Décore une partie du contenu d’une page.


<ui:fragment> Ajoute un fragment de page.
<ui:include> Encapsule et réutilise un contenu dans plusieurs
pages XHTML, comme le marqueur
<jsp:include> de JSP.
<ui:insert> Insère un contenu dans un Template.
<ui:param> Passe des paramètres â un fchier inclus par
<ui:include> ou â un template.
<ui:repeat> Alternative â <c:forEach>.
<ui:remove> Supprime du contenu d’une page.

Bibliothèques de marqueurs autorisés Facelets :

URI Préfixe classique Description


http://java.sun.com/jsf/html h Contient les composants et leurs
rendus HTML
(h:commandButton,
h:commandLink, h:inputText,
etc.).
http://java.sun.com/jsf/core f Contient les actions personnalisées
indépendantes d’un rendu particulier
(f:selectItem,
f:validateLength,
f:convertNumber, etc.).
http://java.sun.com/jsf/facelets ui Marqueurs pour le support des
templates.
http://java.sun.com/jsf/composite composite Sert â déclarer et â défnir des
composants composites.
http://java.sun.com/jsp/jstl/core c Les pages Facelets peuvent
utiliser certains marqueurs
fondamentaux (c:if,
c:forEach et c:catch).
http://java.sun.com/jsp fn Les pages Facelets peuvent
/jstl/functions utiliser tous les marqueurs de
fonctions.

8
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki

a. Marqueurs de commandes :

Marqueur Description
<h:commandButton> Représente un élément HTML pour un bouton de
type submit ou reset.

<h:commandLink> Représente un élément HTML pour un lien


agissant comme un bouton submit. Ce composant
doit être placé dans un formulaire.

b. Marqueurs d’entrées :

Marqueur Description
<h:inputHidden> Représente un élément d’entrée HTML de type
caché (non affché).
<h:inputSecret> Représente un élément d’entrée HTML de type
mot de passe. Pour des raisons de sécurité, tout ce
qui a été saisi ne sera pas affché, sauf si la
propriété redisplay vaut true.
<h:inputText> Représente un élément d’entrée HTML de type
texte.
<h:inputTextarea> Représente une zone de texte HTML.

c. Marqueurs de sortie :

Marqueur Description
<h:outputLabel> Produit un élément <label> de HTML

<h:outputLink> Produit un élément <a>

<h:outputText> Produit un texte littéral

d. Marqueurs de sélection :

Marqueur Description
<h:selectBooleanCheckbox> Produit une case à cocher représentant une
valeur booléenne unique. Cette case sera
initialement cochée ou décochée selon la
valeur de sa propriété checked.
<h:selectManyCheckbox> Produit une liste de cases à cocher.

9
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki

<h:selectManyListbox> Produit un composant à choix multiples,


dans lequel on peut choisir une ou plusieurs
options.
<h:selectManyMenu> Produit un élément <select> HTML.
<h:selectOneListbox> Produit un composant à choix unique, dans
lequel on ne peut choisir qu’une seule
option.
<h:selectOneMenu> Produit un composant à choix unique, dans
lequel on ne peut choisir qu’une seule
option. N’affiche qu’une option à la fois.
<h:selectOneRadio> Produit une liste de boutons radio.

e. Marqueurs de grilles et de tableaux :

Marqueur Description
<h:dataTab1e> Représente un ensemble de données qui
seront affichées dans un élément <tab1e>
de HTML.

<h:co1umn> Produit une colonne de données dans un


composant <h:dataTab1e>.

<h:pane1Grid> Produit un élément <tab1e> HTML.

<h:pane1Group> Conteneur de composants pouvant


s’imbriquer dans un <h:pane1Grid>.

f. Marqueurs de messages :

Marqueur Description
<h:message> Affiche un seul message d’erreur.

<h:messages> Affiche tous les messages d’erreur en attente.

g. Marqueurs divers :

Marqueur Description
<h:body> Produit un élément <body> HTML.
<h:head> Produit un élément <head> HTML.
<h:form> Produit un élément <form> HTML.

10
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki

<h:outputScript> Produit un élément <script> HTML.


<h:outputStylesheet> Produit un élément <link> HTML.

h. Marqueurs de templates :

Marqueur Description
<ui:composition> Définit une composition utilisant éventuellement un
template. Le même Template peut être utilisé par
plusieurs compositions.
<ui:define> Définit un contenu qui sera inséré dans l’élément
<ui:insert>correspondant du Template.
<ui:decorate> Permet de décorer le contenu d’une page.
<ui:fragment> Ajoute un fragment â une page.

<ui:insert> Définit un point d’insertion dans un template dans


lequel on pourra ensuite insérer un contenu placé dans
un marqueur <ui:define>.

i. Marqueurs pour la déclaration et la définition des composants


composites :

Marqueur Description
<composite:interface> Déclare le contrat d’un composant.
<composite:implementation> Définit l’implémentation d’un composant.

<composite:attribute> Déclare un attribut pouvant être fourni à


une instance du composant. Un marqueur
<composite:interface> peut en contenir
plusieurs.
<composite:facet> Déclare que ce composant supporte une
facet.
<composite:insertFacet> Utilisé dans un marqueur
<composite:implementation>.La facet
insérée sera représentée dans le composant.
<composite:insertChildren> Utilisé dans un marqueur
<composite:implementation>. Tous
les composants fils ou les templates seront
insérés dans la représentation de ce
composant.

11
Institut Supérieur De Gestion De Tunis cours AJEE
3ème LFIG BAYOUDHI Chaouki

<composite:valueHolder> Le composant dont le contrat est déclaré


par le marqueur
<composite:interface> dans lequel est
imbriqué cet élément devra exposer une
implémentation de ValueHolder.
<composite:editableValueHolder> Le composant dont le contrat est
déclaré par le marqueur
<composite:interface> dans lequel est
imbriqué cet élément devra exposer une
implémentation
d’editableValueHolder.
<composite:actionSource> Le composant dont le contrat est déclaré
par le marqueur
<composite:interface> dans lequel est
imbriqué cet élément devra exposer une
implémentation de l’interface
actionSource.

j. Objets implicites :

Objet implicite Description Type renvoyé


application Représente l’environnement de Object
l’application web. Sert â obtenir les
paramètres de configuration de cette
application.
applicationScope Associe les noms d’attributs de Map
l’application â leurs valeurs.
component Désigne le composant courant. UIComponent

compositeComponent Désigne le composant


composite courant. UIComponent
cookie Désigne un Map contenant les
noms des cookies (clés) et des Map
objets Cookie.
request Représente l’objet requête HTTP. Object
requestScope Fait correspondre les noms des Map
attributs de la requête â leurs
valeurs.
resource Indique l’objet ressource. Object
session Représente l’objet session http. Object
sessionScope Fait correspondre les noms des Map
attributs de la session â leurs
valeurs.
view Représente la vue courante. UIViewRoot
viewScope Fait correspondre les noms des Map
attributs de la vue â leurs valeurs.

12
Institut Supérieur De Gestion De Tunis cours AJEE
3èmeLFIG BAYOUDHI Chaouki

initParam Fait correspondre les noms Map


des paramètres d’initialisation
du contexte â leurs valeurs
de type String.

param Fait correspondre chaque nom


de paramètre à une seule Map
valeur de type String.

paramValues Fait correspondre chaque nom Map


de paramètre à un tableau String[]
contenant toutes les valeurs de ce
paramètre.

13

Vous aimerez peut-être aussi