Pages enfant
  • 1.9.1 Généralités

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.
Astuce
titleRelu

Relecture RB faite le 16/02/2011

...

Sommaire :

Sommaire
maxLevel3

...

Introduction

Ce chapitre n'a pas la prétention d'être une formation à JSF. Pour plus d'informations, vous pouvez vous reporter à une documentation comme http://www.jmdoudoux.fr/java/dej/chap-jsf.htm. Ne sont abordés ici que quelques éléments.

...

Avec esup-commons V2, nous utilisons facelet (Cf. 1.8.2 Facelet). Les pages sont suffixées en .xhtml et sont écrites en XML, ce qui permet d'utiliser des espaces de noms et des commentaires XML.

JSF 1.2 ou JSF 2.0 ?

Esup-commons V2 permet d'utiliser JSF 1.2 ou JSF 2.0 !

...

  • JSF 1.2 pour le développement d'une portlet
  • JSF 2.0 pour le développement d'une servlet (typiquement une application importante contenant beaucoup d'écrans et pour laquelle on souhaite avoir un bon niveau de productivité lors de l'écriture des pages)

Exemple de page

Bloc de code
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:t="http://myfaces.apache.org/tomahawk"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.prime.com.tr/ui">
<f:view locale="#{sessionController.locale}">
    <head>
        <!-- Commentaire -->
        <title><h:outputText value="#{applicationService.name}" /></title>
        <ui:repeat value="#{tagsConfigurator.stylesheets}" var="path">
            <t:stylesheet path="#{path}" />
        </ui:repeat>
        <ui:repeat value="#{tagsConfigurator.scripts}" var="path">
            <script type="text/javascript" src="#{path}" />
        </ui:repeat>
    </head>
    <body>
        <ui:include src="_include/_header.xhtml" />
        <div id="welcomepages">
            <div id="navigationHeader">
                <h:form id="nav_header" styleClass="app-form" />
            </div>
            <div>
                <div>
                </div>
                <div>
                    <t:htmlTag value="br" />
                    <ui:insert name="allContent" />
                </div>
                <div style="clear:both;" />
            </div>
            <div id="navigationFooter"
                class="fl-container-flex app-pagebar">
                <h:form id="nav_footer" styleClass="app-form" />
            </div>
        </div>
        <div>
            <h:outputText value="#{applicationService.name} " />
            <h:outputText value="v#{applicationService.version} - " />
            <h:outputText value="#{applicationService.copyright}" />
        </div>
    </body>
</f:view>

</html>

...

  • la balise <html> est l'élément racine de la page. Elle contient notamment la définition des espaces de noms qui permettent de définir les composants JSF que l'on va utiliser. Ici :
    • xmlns:f="http://java.sun.com/jsf/core" et xmlns:h="http://java.sun.com/jsf/html" sont les 2 librairies de base de JSF
    • xmlns:ui="http://java.sun.com/jsf/facelets" est la librairie facelet (NB : en JSF 2.0, facelet est aussi une librairie de base de JSF alors qu'elle est optionnelle en JSF 1.2)
    • xmlns:t="http://myfaces.apache.org/tomahawk" est une librairie proposée par la fondation Apache qui propose quelques utilitaires (notamment de manipulation du HTML)
    • xmlns(tirer la langue)="http://primefaces.prime.com.tr/ui" est la librairie PrimeFaces qui va apporter des composants de haut niveau (interface riche et support de Ajax). Elle est donnée ici à titre d'exemple car, suivant les besoins, on utilisera telle ou telle librairie (RichFaces, Trinidad, OpenFaces, etc.)
  • la balise <f:view locale="#{sessionController.locale}"> est la balise JSF servant à inclure les autres balises JSF. La propriété locale permet de définir la langue qui sera utilisée pour les messages.
  • la balise <ui:repeat value="#{tagsConfigurator.stylesheets}" var="path"> permet de répéter n fois un même contenu. n est fonction du nombre d'entrées retournées par la méthode getStylesheets du bean tagsConfigurator. Chaque entrée est ensuite positionnée dans une variable (path ici) afin d'être réutilisée dans la boucle.

Syntaxe EL

JSF dispose d'un Expressions Language (EL) qui lui est propre et syntaxiquement différent de l'EL de JSP 2.0. Il est utilisable dans les attributs des taglibs JSF. Il permet d'accéder en lecture ou en écriture à des propriétés du contrôleur (dans la mesure où celui-ci implémente des getters/setters sur ces propriétés). Il permet aussi d'invoquer une action du contrôleur (méthode sans paramètre qui renvoie une chaîne).

...

On peut également utiliser quelques opérateurs logiques (and, or, not, empty, ...) ainsi que la plupart des opérateurs mathématiques.

Navigation entre les pages

La navigation entre les pages de l'application est faite en JSF à l'aide de règles de navigation écrites en XML, définies dans esup-commons par convention dans le fichier /webapp/WEB-INF/navigation-rules.xml.

...