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 :

Appeller une méthode des l'ouverture de la page


Sujet :

JSF Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut Appeller une méthode des l'ouverture de la page


    Je souhaiterais appeller une méthode en java des l'ouverture de la page pour pouvoir initialiser un objet.

    Ceux que je pourais faire,c'est d'appeller une page bidon en jsp qui récupere certaines valeurs pour récuper les informations dans la base afin de créer mon objet.Et pour finir,d'appeller ma page jsf qui aura l'objet initialisé par l'objet que j'aurais crée auparavant.

    Mais, je n'aimerais pas passer par une page jsp, directement le faire à partir de ma page jsf, ou bien un autre moyen propre à jsf permettant d'initialiser qu'elle que champ de mon bean des l'ouverture de ma page
    J'ai vu un sujet répondant à peut prés à mon problème ICI
    Mais comment récuper l'id(parametre passé à la page) dans la fonction appellé par beforePhase?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    FacesContext.getCurrentContext() te renvoie le context JSF courant, à partir de là t'as accès à la requete http et aux paramètres de celle-ci. Effectivement, un phase cycle listener, dans ton cas, est approprié.

  3. #3
    Membre confirmé 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
    Points : 597
    Points
    597
    Par défaut
    Bon, si on reprend ton problème c'est concrètement passer en param un id à une page jsf et faire en sorte qu'elle affiche dans ses champs le détail de la ligne de la table (en gros).

    Imaginons que ton objet s'appelle developpeur. tu passes page.jsf?iddev=5

    Dans ton managed beau tu cre un
    private Developpeur dev;

    un getter et setter pour cette variable.
    Dans le getter du fais :

    if (dev == null)
    {
    // premier chargement de la page, tu va lire dans la request l'id passé et tu charges l'objet.
    }
    return dev;



    tu ajoutes à ta page JSF un t:savestate pointant sur ton #{tongbackbean.dev}
    Ainsi, même lors d'un post back ton objet sera sauvegardé dans ta page et dans le getter il ne sera jamais null. (Scope page sous seam en gros).

    des questions?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    merci,une petite question,je ne vois pas comment pointer mon bean.....?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    t:savestate pointant sur ton #{tongbackbean.dev}

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Points : 58
    Points
    58
    Par défaut
    Salut stephane92400

    la methode que t'appele avec beforePhase doit avoir pour signature :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     public void tamethode (PhaseEvent event){
         // on récupère le context
         FacesContext context = event.getFacesContext();
    
         //on récupère ton parametre
         HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
         String indice = request.getParameter("indice");
    
        // initialiser ton bean avec ce parametre en créant une value expression
       ValueExpression ve = context.getApplication().getExpressionFactory().createValueExpression(context.getELContext(),"#{tonbean}", java.lang.Object.class);
       Object tonbean = new Object(indice);  //par exemple
       
       //affectation à la value expression
       ve.setValue(context.getELContext(),tonbean);
    
        
     }
    voila

  6. #6
    Membre confirmé 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
    Points : 597
    Points
    597
    Par défaut
    Pour pointer le bean ?

    C'est dans ton managed bean JSF tout simplement.
    exemple :
    <t:saveState value="#{testRepartitionAgence.irisFiltre}" />


    testRepartitionAgence est un managed bean JSF
    irisFiltre est une valeur privée avec un getter et setter public...


    Pour Medii : je pense pas qu'un phase listener soit nécessaire lorsque on peut faire un simple lazy loading du paramètre ....

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    qu'entends tu par lazy loading du paramètre heid?

  8. #8
    Membre confirmé 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
    Points : 597
    Points
    597
    Par défaut
    J'entend faire ce que je t'explique dans les posts précédent :

    A la première demande de la valeur, tu charges la valeur, ensuite tu te contentes de renvoyer cette valeur a chaque demande. Le save state te permet de conserver cette donnée dans le scope page.

    Lazy loading = charement paresseux ou chargement à la demande.

  9. #9
    Expert éminent
    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
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour,
    Remarques que ta méthode heid n'est pas vraiment tout ce qu'il y'a de plus propre et fiable ... je l'ai appris à mes dépens en passant deux heures de débogage et 100 lignes log.debug (log4j).
    Ca venait du composant dataTable de RichFaces: j'ai fait le lazy loading de la liste d'objets dans le getter attaché à l'attribut value du dataTable. Dans ce getter, je calcule entre autre les sommes des colonnes que j'affiches dans le footer de la table.
    Eh bien il s'est avéré que Richfaces dans toute sa sagesse a décidé qu'il commence par traiter le footer avant même d'appeler le getter du value, et donc j'obtenais le mauvais résultat dans le footer.

    Bref, on n'est pas assuré de l'ordre dans lequel les composants sont rendered (y'as pas un equivalent français pour rendered ?) non plus sur l'ordre d'appele des getters.

    Legen ............. dary

  10. #10
    Membre confirmé 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
    Points : 597
    Points
    597
    Par défaut
    La tu ajoutes dans ton getter du métier alors que tu es dans le couche présen .... wait 4 it .....tation

    Pourquoi pas un DTO qui te retourne 1- la liste 2- les données connexes.

    J'utilise cette méthode (pattern?) depuis 4 ans en <axe du mal> asp.net </axe du mal> depuis 6 moi en JSF j'ai pas eu un problème.

  11. #11
    Expert éminent
    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
    Points : 7 679
    Points
    7 679
    Par défaut
    Citation Envoyé par heid Voir le message
    La tu ajoutes dans ton getter du métier alors que tu es dans le couche présen .... wait 4 it .....tation
    Euh ... non, le getter ne fait qu'appeléer la couche métier pour récupérer une liste de données, puis met à jour les totaux en conséquence (qui n'a rien à voir avec le métier).
    Je ne croies pas que des calculs annexes de la sorte doivent être délégués ailleurs, car ils font strictement partie de la couche présentation/contrôle, c'est pour cela que je n'ai pas envisagé de passer par des DTOs.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Points : 58
    Points
    58
    Par défaut
    j'ai remarqué que souvent JSF appelait plusieurs fois les getters d'un attribut, ta solution heid ne peut être efficace que pour certains cas mais dans une application bien plus complexe je doute qu'elle soit la plus optimale


    écrit par djo.mos
    (y'as pas un equivalent français pour rendered ?)
    le seul équivalent que j'ai trouvé c'est le rendu de composant

  13. #13
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Citation Envoyé par Mediii Voir le message
    j'ai remarqué que souvent JSF appelait plusieurs fois les getters d'un attribut, ta solution heid ne peut être efficace que pour certains cas mais dans une application bien plus complexe je doute qu'elle soit la plus optimale
    Ce que heid veut dire, c'est faire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public XXX getMonAttribut() {
        if (monAttribut == null) {
            // Trucs à faire pour initialiser monAttribut
        }
        return monAttribut;
    }
    Donc même si le getter est appelé 10 fois, tu ne feras qu'une seule fois - au plus - appel au code d'initialisation de l'attribut...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Points : 58
    Points
    58
    Par défaut
    romaintaz oui en effet en ajoutant ce if ça ne pose plus de problème

  15. #15
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    essaie de voir ca :http://jsf-comp.sourceforge.net/comp...oad/index.html
    c'est si simple a mettre en ouvre et meme a modifer une seule classe (un phase listner)
    La connaissance est la seule chose qui s'accroit lorsqu'on la partage.

  16. #16
    Membre confirmé 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
    Points : 597
    Points
    597
    Par défaut
    Je trouve pas ça terrible, tu ajoutes un fichier de config et tu exporte ta logique de fonctionnement de ta page en dehors des fichier de ta page.
    Personnellement je préfère utiliser un lazy loading pour initialiser des valeurs.
    Par contre leur composant easy SI est terriblement utile.

  17. #17
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 335
    Points : 332
    Points
    332
    Par défaut
    Comment faire ca c'est simple je t'accorde ca mais pourquoi refaire quelque chose de deja fais
    mais quand tu parle de lazy loading ca veux dire quoi????
    La connaissance est la seule chose qui s'accroit lorsqu'on la partage.

  18. #18
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Lazy loading, ça veut dire qu'on ne charge / initialise une donnée que si on en a besoin, et non par défaut.
    Le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public Object getMyProperty() {
        if (myProperty == null) {
            // Initialisation de myProperty
            ...
        }
        return myProperty;
    }
    est un exemple de Lazy Loading: On n'initialise myProperty que si on y fait appel...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  19. #19
    Expert éminent
    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
    Points : 7 679
    Points
    7 679
    Par défaut
    Citation Envoyé par heid Voir le message
    Par contre leur composant easy SI est terriblement utile.
    C'est pas une copie conforme de celui de tomahawk ?

  20. #20
    Membre confirmé 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
    Points : 597
    Points
    597
    Par défaut
    Lequel? car je pense pas que le sioux nous permette de faire ce genre de truc : générer à la volée une liste de beans quelconque en SelectItem.

    Moi ça me fait plutôt penser à l'approche asp.net ou les dropdownlists ont une propriété value et une propriété text.

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/02/2014, 10h41
  2. Appeler une méthode en spécifiant le nom des arguments
    Par Christophe Genolini dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 24/06/2013, 14h54
  3. Appeller une methode des l'ouverture de la page
    Par stephane92400 dans le forum JSF
    Réponses: 4
    Dernier message: 27/09/2007, 15h16
  4. Appeler une méthode dynamiquement
    Par doof dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/01/2005, 23h15
  5. Comment l'appel à une méthode virtuelle....
    Par Blobette dans le forum C++
    Réponses: 7
    Dernier message: 07/12/2004, 13h55

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