IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Forcer le bean lors de la Re-visite d'une page


Sujet :

JSF Java

  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut Forcer le bean lors de la Re-visite d'une page
    Bonjour à tous,

    je n'ai certainement pas tout compris à JSF, et j'espère que ma question n'est pas trop nulle, mais j'ai fait une petite application dans le but de comprendre le fonctionnement, et j'ai un petit problème qui persiste avant que mon appli ne soit terminée...

    Je m'explique:

    en page d'accueil, il y a une liste d'objets qui s'affiche, tout simplement.
    La liste est créée dans une fonction appelée par le constructeur du bean.
    en page de modifications, on peut modifier ces objets.

    ça marche, le problème c'est que quand on retourne à la page d'accueil, la liste n'est pas mise à jour... normal: le bean existe déjà, le constructeur n'est pas rappelé...

    Ma question est comment faire pour forcer le constructeur de ce bean à être rappelé?

    c'est sûrement tout simple quand on le sait, mais personnellement je ne trouve pas, j'ai dû zapper quelque chose dans les tutoriels...

    merci d'avance :-)

    sassien

  2. #2
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666

  3. #3
    Membre chevronné Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Par défaut
    AU lieu de le créer dans ton constructeur fait une méthode getTruc().
    Dans getTruc fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (mylistprivate == null)
    {
    chargemalisteprivate();
    }
    return mylistprivate;
    Optimisation : ajoutes un t:savestate sur ta méthode getTruc pour ne charge l'objet que lors du premier affichage de la page.

  4. #4
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut
    Mais que c'est bien!

    bon ben j'avais fait toute mon appli avec des beans session, au moins à la fin j'aurais appris qu'il y en a d'autres qui marchent aussi ;-)

    merci!

    ps: je me sens un peu bête, tout de même ;-)

  5. #5
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    En toute franchise, je dois avouer que c'est pas aussi simple que ça ... avec JSF, dûr dûr de faire un truc utile avec le scope request

  6. #6
    Membre chevronné Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Par défaut
    J'utilise uniquement le scope request !

  7. #7
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Hum .. Je serais très intéressé pour voir comment tu mets en place des trucs du genre édition en-place d'une liste d'éléments par exemple ...

  8. #8
    Membre chevronné Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Par défaut
    Edition d'une liste?

    Et bien comme je l'ai dit à notre amis, pour avoir la liste en question tu fait un getter qui charge la liste si elle est null. Tu ajoutes un savestate qui stocke dans le "scope page" la liste. Donc au rechargement, on ne recharge pas la liste de la bdd mais on garde celle dans le viewstate. En fait, grâce au view state, lors du rechargement la liste n'est pas nulle, donc on ne la recharge pas de la base, on la retourne directement.

    Ainsi, si tu quittes la page et que tu y retourne juste après, la liste est actualisée de la base de données, par contre chaque "postback" dans cette même page utilisera le views state sans appeler la base. C'est un très bon compromis entre actualisation des données et mise en cache. De plus, cela économise de la mémoire sur le serveur, je met en session seulement ce qui est nécessaire.

    Comment fais tu pour rafraichir une liste si celle ci à été modifié par un autre utilisateur avec ton scope session?

  9. #9
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Très intéressant ce saveState ... perso, j'essaies de séparer les données rafraichissable dans un bean requestion et les autres que je dois garder (édition in-place, dialogue multi-page) dans un bean session.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Heid , je suis intéressé par ta méthode qui charge les informations , mais je ne comprend pas comment tu fais appel à cette méthode sans passer par le constructeur ou par un bouton/action :s

  11. #11
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    C'est un composant dans la page, et à chaque fois que la page est "dessiné" (rendered), il fait ce qu'il fait. Donc pas besoin de l'invoquer manuellement.

  12. #12
    Membre chevronné Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Par défaut
    En effet, c'est appelé par le composant.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <t:dataTable value="#{base.typePrestationListe}" var="unTypePrest">
    le code serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public List<Object> getTypePrestationListe(){
    if (typePrestationListe == null)
    {
    // cas du premier chargement de la page car après la valeur est jamais nulle car initialisée par le save state
    initialiserTypePrestation();
    }
    return typePrestationListe;
    }

    Dans la page on ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <t:saveState id="st1" value="#{base.typePrestationListe}" />

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 90
    Par défaut
    Ah oui , je n'y avais pas pensé , je débute en JSf faut dire :p

    Merci bien.


    EDIT : et un gros merci pour m'avoir fait découvrir le saveState , c'est très très pratique , j'ai résolu deux truc qui m'énervait grâce à ça

  14. #14
    Membre éclairé
    Homme Profil pro
    et autre ;)
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : et autre ;)
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Par défaut
    Merci pour la réponse qui m'a bien aidé aussi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Forcer le focus d'un champ au chargement d'une page
    Par marlocq dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/03/2015, 14h41
  2. Réponses: 2
    Dernier message: 30/09/2009, 09h18
  3. [ZF 1.8] Libérer les paramètres dans l'URL après visite d'une page avec parametre
    Par mymind dans le forum Zend Framework
    Réponses: 3
    Dernier message: 24/07/2009, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo