Dans la suite de cette page, les instructions que vous devez suivre sont indiquées comme suit :
instructions à suivre !
Introduction
Notre objectif maintenant est de peupler la page du panier shoppingcart.xhtml avec des produits que l'utilisateur aura sélectionnés.
Représentation des éléments du panier : JavaBean
Dans un premier temps nous allons volontairement ignorer le mécanisme permettant à l'utilisateur de sélectionner ces produits.
Créer un JavaBean ShoppingCartItem disposant de :
- un identifiant de type Integer ;
- une quantité de type Integer ;
- un produit de type Product ;
N'oubliez pas de respecter les conventions liées aux JavaBeans : sérialisation, constructeur(s), accesseurs !
Gestion du panier : ManagedBean
Il est maintenant nécessaire de faire le lien entre la page shoppingcart.xhtml et les objets de type ShoppingCartItem. Pour cela, nous allons de nouveau utiliser la notion de ManagedBean de JSF.
Création du bean
Pour commencer, créer un JavaBean ShoppingCartManager disposant d'un attribut permettant de stocker le panier, c'est-à-dire une liste d'objets de type ShoppingCartItem.
Vous pouvez utiliser le type ArrayList<ShoppingCartItem>. N'oubliez pas d'initialiser cette liste dans le constructeur, et de créer les accesseurs correspondants.
Transformer votre JavaBean en ManagedBean en :
- l'annotant @ManagedBean (importé dans javax.faces.bean) ;
- définissant la durée de conservation de son état (scope). Ici vous utiliserez le scope "session" : @SessionScoped.
Scope "session" : le scope "session" pour un bean signifie que son état est sauvegardé pendant la durée de la session web de l'utilisateur. De plus, chaque instance de ce bean sera associée à un utilisateur donné et un seul pendant toute la durée de la session (rappel : la session web est créée automatiquement à la première requête de l'utilisateur concernant la page web, elle est détruite automatiquement après un certain temps d'inactivité de l'utilisateur sur la page).
Ici, ce scope a été choisi parce que le panier est propre à un utilisateur donné et qu'il est intéressant de conserver son état pendant toute la durée de la session web de l'utilisateur afin qu'il soit accessible depuis toutes les pages de l'application.
Un des avantages de l'utilisation de ce scope pour un bean est que celui-ci est automatiquement placé dans la session de l'utilisateur et est donc accessible depuis toutes les pages de l'application via l'EL. Il sera également accessible dans tous les ManagedBeans via le code suivant :
1 | FacesContext ct = FacesContext.getCurrentInstance(); |
2 | ct.getExternalContext().getSessionMap().get( "beanJNDIName" ); |
Utilisation du bean et ajout d'éléments factices au panier
Utiliser le composant JSF DataTable pour afficher la quantité et le nom du produit de chacun des elements contenus dans le panier (il n'est pas nécessaire d'afficher l'identifiant de l'élément, qui servira uniquement pour la persistance).
Ajouter des éléments au panier en utilisant une méthode "initCart" annotée @PostConstruct dans le ShoppingCartManager.