TP2 2011 EJB 3.1 / JSF2

De $1

Version de 11:58, 7 Mai 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

Introduction

Dans cette séance :

  • Exercices pour comprendre le modèle de navigation de JSF (je reprends ici une partie d'un TP de R.Grin, original sur : http://deptinfo.unice.fr/~grin/mescours/web-entreprise/tp/tpprg/),
  • Etude d'une correction du TP1 qui corrige les problèmes évoqués à la fin du TP1, notamment en mettant en oeuvre un Backing Bean de portée View.
  • Début du TP long à rendre sur un gestionnaire de comptes bancaires. Pour les nouveaux n'ayant pas suivi ce cours l'an dernier, vous verrez notamment comment créer une base de données à partir de zéro pour l'intégrer dans votre application.

 

Première partie : étude du modèle de navigation PRG (Post Redirect Get)

Objectifs de cette partie :

  1. Présenter les problèmes du POST utilisé par défaut par JSF, vus dans le TP1,
  2. Présenter le modèle PRG qui permet d'éviter la double soumission des formulaires et de pouvoir garder un marque-page des pages affichées.

Important : dans ce TP vous utiliserez des backing bean de portée "Requête". Il faut toujours essayer de limiter au maximum la portée des beans pour éviter l'encombrement de la mémoire (ce qui peut être un problème pour les sites Web très fréquentés). Evidemment dans certains cas, la portée "Session" est la plus indiquée (par ex pour un backing bean qui gère les connexions par login/password).

Exemple 1 : analyse d'un post tout simple

Nous allons étudier une application qui contient 2 pages JSF qui se référencent :

  • index.xhtml (point d'entrée de l'application Web) qui contient un formulaire avec champ de saisie d'un entier ; la soumission du formulaire passe la main à page2.xhtml,
  • page2.xhtml qui affiche les 5 nombres qui suivent le nombre saisi et qui contient un lien pour revenir vers la page index.html

Vous créerez un nouveau projet de type Web Application. Utilisez simplement le menu "new/JSF Page" pour créer les pages. 

Voici le code des deux pages en question :

Index.xhtml 

<?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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">

    <h:head>
        <title>Test 1</title>
    </h:head>
    <h:body>


     <h:form>
        <h:outputLabel value="Entrez un nombre" for="nombre"/>

        <h:inputText id="nombre" value="#{bean.nombre}"/>

        <h:commandButton value="Valider" action="page2"/>

      </h:form>

    </h:body>
</html>

page2.xhtml

<?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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">

    <h:head>
        <title>Test 1</title>
    </h:head>
    <h:body>


     <h:form>
        <h:outputLabel value="Entrez un nombre" for="nombre"/>

        <h:inputText id="nombre" value="#{bean.nombre}"/>

        <h:commandButton value="Valider" action="page2"/>

      </h:form>

    </h:body>
</html>

Testez en entrant autre chose qu'un nombre entier (un message doit s'afficher si vous avez bien écrit votre application).

Essayez de faire afficher au début dans la zone de saisie le nombre entré précédemment quand vous saisissez un nouveau nombre.

Remarquez-vous des anomalies quant à l'URL affiché par le navigateur ?

Rechargez la page qui affiche les 5 nombres. Que fait le navigateur ? Expliquez.

Est-ce possible de mettre un signet sur la page 2 pour un certain nombre. Par exemple 5 ; la page 2 affichera les nombres 6 à 10 qui sont censés représenter une information importante sur le nombre 5...

Ce TP étudie un modèle, appelé PRG, pour ne plus avoir ce genre de problème.