Création d'un projet de type Entreprise Application








télécharger 247.17 Kb.
titreCréation d'un projet de type Entreprise Application
page6/6
date de publication02.04.2017
taille247.17 Kb.
typeDocumentos
ar.21-bal.com > loi > Documentos
1   2   3   4   5   6
/>  

  •   id="update" value="Update" action="#{customerMBean.update}"/>  

    juste après le menu déroulant pour les discountCodes... Vous comprenez maintenant ce que cela signifie :

    • Si on clique sur le premier bouton, on appelle list() dans CustomerMBean.java,

    • Si on clique sur le second bouton on appelle update()...

    Regardons la version actuelle de la méthode update() :

    view plainprint?

    1. public String update() {  

    2.         System.out.println("###UPDATE###");  

    3.         customer = customerManager.update(customer);  

    4.         return "CustomerList";  

    5. }  

    Cette méthode prend la propriété "customer", de type Customer et appelle une méthode métier dans le gestionnaire de clients qui va mettre à jour le client en base. Les attributs de cette propriété (nom, etc...) ont pour valeurs celles du formulaire de la page de détails. Si on a modifié ces valeurs avant de cliquer sur le bouton "update", les attributs de la propriété ont été modifiés. Donc on a bien dans "customer" un client mis à jour (en mémoire pour le moment, regardez ce que fait customerManager.update() pour voir. On verra en cours que c'est là que se fait la modification en base de données).

    Il existe en effet une relation entre les clients et les codes de remise. Regardez attentivement la classe entité Customer.java, vous verrez que le code de remise est un attribut discountCode de type DiscountCode. Or le menu déroulant dans la page de détails, lorsqu'on modifie le code de remise, nous renvoie une String. C'est le travail du Converter de transformer cette string en objet de type DiscountCode !



     

    Observez la requête nommée DiscountCode.findByDiscountCode définie dans un attribut de la classe bean entité DiscountCode. Cette requète possède un paramètre noté :discountCode. Quand on donne la valeur d'un code de réduction à ce paramètre, on peut récupérer l'objet de type DiscountCode correspondant. On propose d'utiliser une nouvelle méthode     public DiscountCode getDiscountCodeByDiscountCode(char code) dans le bean session session.DiscountCodeManager. Voici cette méthode:

    view plainprint?

    1. public DiscountCode getDiscountCodeByDiscountCode(char code) {  

    2.         Query query = em.createNamedQuery("DiscountCode.findByDiscountCode");  

    3.         query.setParameter("discountCode", code);  

    4.         return (DiscountCode) query.getSingleResult();  

    5.  }  

     Observez: on associe le caractère code au paramètre de requête "discountCode", et on récupère un unique résultat de type DiscountCode: query.getSingleResult().

    Voici finalement ce qu'on vous propose comme transformation String->DiscountCode par le Converter:

    view plainprint?

    1. private Converter discountCodeConverter = new Converter() {  

    2.   

    3.         @Override  

    4.         public Object getAsObject(FacesContext context, UIComponent component, String value) {  

    5.             char code = value.charAt(0);  

    6.             DiscountCode dc = discountCodeManager.getDiscountCodeByDiscountCode(code);  

    7.             return dc;  

    8.        }  

    9.         @Override  

    10.         public String getAsString(FacesContext context, UIComponent component, Object value) {  

    11.             DiscountCode dc = (DiscountCode) value;  

    12.             return dc.getDiscountCode()+" : "+dc.getRate()+"%";   

    13.         }  

    14.     };  

    Exécutez, testez, amusez-vous à modifier les valeurs des clients, vérifiez dans le gestionnaire de base de données de netbeans que les modifications ont été prises en compte...

    Problèmes devant encore être réglés :

    • Si on ouvre deux listes dans deux onglets différents, et qu'on modifie deux clients en même temps, que peut-il arriver ? Pourquoi ?

    • Les URLs ont tous un temps de retard, la page de détails affiche l'URL de la liste, etc. Pourquoi ? Nous verrons en cours comment corriger ce problème.

    • Ajoutez une trace dans la méthode getCustomers() de CustomerMBean.java, affichez la liste des clients, la méthode est appelée plusieurs fois. Proposez une optimisation. Attention, cela peut provoquer d'autres problèmes...

    Correction de ce TP utilisant diverses améliorations vues en cours, et corrigeant la plupart des problèmes évoqués précédemment

    Cette correction fait diverses choses :

    1. Elle "cache" la liste des customers qui doivent être affichés dans la table. Vous avez pu remarquer en mettant un println dans la fonction getCustomers() qu'elle était appelée plusieurs fois. Requêter dans cette méthode est non seulement peu performant (on va requêter plusieurs fois) mais comme l'ordre des éléments retournés peut changer, cela "casse" les fonctionalités de tri et de filtres de la datatable Primefaces. 

    2. Dans la page jsf CustomerList.xhtml on a rajouté un lien ou un bouton "refresh" qui appelle la méthode refresh... dans le backing bean, qui force ma mise à jour du modèle en faisant un appel à la bd.

    3. Pour que le bouton "reload" du navigateur fasse la même chose, on a utilisé un "preRenderView" listener qui appelle cette même méthode refresh.

    4. Dans le formulaire, on a mis des f:viewParam pour récupérer un paramètre http nommé id, passé dans l'url. Cette ligne de gestion des viewParam appelle la méthode setId() du backing bean. Ainsi, lorque la page est invoquée avec un paramètre ?id=1 on va initialiser une propriété/modèle de nom id et de valeur 1 dans le backing bean.

    5. On a mis un preRenderViewListener dans la page du formulaire, qui appelle une méthode du backing bean pour qui va chercher le Customer qui a pour id la valeur initialisée dans l'étape précédente. On initialise donc le modèle utilisé par les champs du formulaire -> le formulaire sera pré-rempli lors du rendu !

    6. Du coup on a un formulaire autonome !!!! On peut copier/coller son URL et l'envoyer  par mail, le lien affichera toujours un formulaire pré-rempli

    7. On a mis ?faces-redirect=true partout où on fait de la navigation -> ceci force le mode de navigation Post-Redirect-Get (PRG) ce qui permet d'avoir toujours les bons URLs affichés, ceux correspondant à la page affichée.

    8. On a modifié les boutons dans la première colonne pour que ce soient juste des liens statiques, et non des liens ou boutons appelant des méthodes de controle dans le backing bean.

    9. J'ai aussi simplifié la manière dont on affiche la liste en utilisant une méthode similaire aux datatables, avec un attribut var=... regardez donc la partie selectItems et la methode getAllDiscountCodes dans le backing bean.

     

    Pour la semaine prochaine:

    Inspirez-vous de l'article d'introduction à JSF 2.0 du site de Netbeans http://netbeans.org/kb/docs/web/jsf20-intro.html (Cet article contient plein de trucs pour développer plus rapidement et plus efficacement sur NetBeans !!!) pour utiliser une facelet pour rendre le site ergonomique (un en-tête avec le titre du TP (statique) et le titre de chaque page mis en forme, et une colonne de gauche qu'on utilisera plus-tard pour mettre les liens de navigation).

    Mots clés:

    Attacher fichier ou image

     Fichiers (2)

    Fichier

    Taille

    Date

    Attaché par

     

     



    primefaces-3.0.M3.jar

    Aucune description

    1967.79 Ko

    17:29, 19 Sep 2011

    Max

    Actions





    TP1CustomerApplication.zip

    Aucune description

    59.34 Ko

    08:51, 13 Déc 2012

    MichelBuffa

    Actions

     Images (39)

    « précédent suivant »

    Voir 1 - 6 sur 39 images | Voir tout 

    Haut du formulaire



    Bas du formulaire



    Aucune description
     
    Snap3.jpg  Actions



    Aucune description
    Snap28 (2...  Actions



    Aucune description
     
    Snap23.jpg  Actions



    Aucune description
    Snap40.jpg  Actions



    Aucune description
    Snap39.jpg  Actions



    Aucune description
    Snap38.jpg  Actions
  • 1   2   3   4   5   6

    similaire:

    Création d\Instruction ministérielle dgas/2C/dhos/dss/2010/06 du 7 janvier 2010...
    «capacité à faire» du porteur de projet de création de pasa qui est visée. Les projets retenus devront être réalisables dès 2011

    Création d\Création d’entreprise, auto-entrepreneuriat, reprise

    Création d\Création d’entreprise, auto-entrepreneuriat, reprise

    Création d\Création d’entreprise, auto-entrepreneuriat, reprise

    Création d\Création d’entreprise, auto-entrepreneuriat, reprise

    Création d\Résumé L'application des Nouvelles Technologies de l'Information...

    Création d\Création de l’activité «BlobsActivity»
    «Global». Ce token est stocké sous la forme d’un objet de type «wazserviceAccount»

    Création d\Preface™ Système d’aide à la décision pédagogique et opérationnel...

    Création d\Projet appli-cr application d'enregistrement et de suivi des comptes-rendus de visite

    Création d\I- présentation de l’entreprise et du projet








    Tous droits réservés. Copyright © 2016
    contacts
    ar.21-bal.com