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 :

Peut-on accéder à un ManagedBean avant d'executer la jsp ?


Sujet :

JSF Java

  1. #1
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut Peut-on accéder à un ManagedBean avant d'executer la jsp ?
    Bonjour,

    je débute complètement avec jsf mais je me pose une question très simple : Peut-on accéder à un ManagedBean avant d'exécuter la jsp ?

    Je m'explique, j'ai fait une page mapage1.jsp qui contient quelques trucs dont le lien suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:commandLink action="#{monManagedBean.lien2}">
       <h:outputText value="lien2">
    </h:commandLink>
    lorsque je click sur ce lien j'arrive dans la méthode lien2() du managedBean monManagedBean.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public String lien2()
    {
      //traitement java pour récupérer une liste en BDD et la mettre en request
      return "mapage2";
    }

    Cette méthode effectue un traitement genre un appel à la BDD pour récupérer une liste et mettre cette liste en request. Puis elle retourne la chaine de caractère "mapage2".

    d'après ce qui est indiqué dans mon faces-config, la page mapage2.jsp va être affiché à l'écran :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <navigation-rule>
      <from-view-id>/jsp/mapage1.jsp</from-view-id>
      <navigation-case>
         <from-outcome>mapage2</from-outcome>
         <to-view-id>/jsp/mapage2.jsp</to-view-id>
      </navigation-case>
    </navigation-rule>
    dans mapage2.jsp je vais pouvoir récupérer la liste présente en request et l'afficher.


    Voilà quand j'appelle l'url http://localhost:8080/learn/jsp/mapage1.faces je tombe sur ma page avec mon lien et lorsque je click dessus j'arrive bien sur mapage2 avec ma liste récupérée en BDD.

    Jusque là ça va. Mon problème est que je voudrais accéder directement à mapage2 (et donc passer par le managedBean qui appel la BDD) sans passer par mapage1. Est-ce possible ? et comment dois-je faire ?

    J'espère avoir été clair dans ma demande (je peux préciser si besoin).

    Merci à ceux qui voudront bien m'éclairer.

    PoichOU

  2. #2
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Bonjour poichOU,

    C'est quelque chose de faisable, il suffit de faire une recherche dans ce forum, où plusieurs personnes se demandaient en effet s'il était possible d'exécuter une méthode du bean avant que la page ne soit créée...
    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

  3. #3
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    Salut romaintaz,

    merci pour ta réponse. J'ai cherché sur le forum et dans la FAQ avant de poser ma question et je n'ai pas trouvé. Je suis pourtant sur que ce sujet à déjà été traité.

    Peux-tu me donner une piste (genre mot clé à rechercher) pour trouver des topics dessus ?

    Ce que je veux faire me parait être un truc de base et pourtant je n'arrive pas à trouver de la doc dessus. Y a-t-il une raison (genre c'est pas bien de le faire) ?

    merci

    PoichOU

  4. #4
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Si je comprends bien, ton bean est en scope request ?
    Il suffit alors d'initialiser la liste à afficher dans la page dans le constructeur du bean, non ?
    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

  5. #5
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    salut romaintaz et merci de ta réponse,

    oui oui mon bean est en request.

    perso j'aurai plutôt imaginé une solution où on déclare une servlet du style : <servlet>*facesExe</servlet> en précisant comment l'exécuter, puis en appelant ma page par http://localhost:8080/learn/jsp/mapage1.facesExe

    C'est donc ça "la technique" pour appeler un traitement avant la jsp en jsf, mettre le code dans le constructeur ?
    et si mon bean est un singleton ça marche pas alors (ou alors que la 1ère fois) ?

  6. #6
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    en fait cette astuce ne répond pas vraiment à mon problème.

    je voudrais effectuer un traitement java et selon le résultat de ce traitement je souhaite afficher la page page1.jsp ou page2.jsp.

    Donc si j'effectue ce traitement dans le constructeur je ne peux pas lui préciser de faire tel ou tel forward. Tu vois ce que je veux dire ?

    PoichOU

  7. #7
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Tu peux tout à fait avoir ce genre de chose :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public String uneAction() {
        // Traitement...
        ...
        if (uneCondition) {
            return "page1";
        } else {
            return "page2";
        }
    }
    uneAction étant une action exécutée par un bouton, un lien, etc. d'une page JSF.
    Selon une condition particulière, l'utilisateur sera redirigée vers page1 ou page2 ("page1", "page2" sont des ID de navigation rules de faces-config).

    Ca ne t'irait pas ça ?
    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

  8. #8
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    oui c'est exactement ça que je veux faire .

    uneAction étant une action exécutée par un bouton, un lien, etc. d'une page JSF.
    exécuter cette action par un bouton j'ai réussi à le faire, mais je voudrais l'exécutée directement par l'url. Sais-tu comment faire ça ?

    merci de tes réponses en tout cas.

    PoichOU

  9. #9
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    peut tu donner un exemple plus concret de ce que tu souhaites faire..?
    une solution peu etre de faire ce traitement dans le constructeur d'un bean utiliser dans la page jsp.

    si il y'a #{bean.pram} dans la jsp le constructeur du bean sera forcement appelé avant l'affichage de la page..
    ce n'est pas tres propre mais si tu expliques un peu plus, y'a des solutions meilleures..

  10. #10
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    hello Sniper37

    Alors j'ai une page jsp bouchon.jsp qui contient le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:commandLink action="#{monManagedBean.uneAction}">
       <h:outputText value="lien bouchon">
    </h:commandLink>
    j'ai une classe java monManagedBean.java qui contient le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    public String uneAction() {
        // Traitement...
        ...
        if (uneCondition) {
            return "page1";
        } else {
            return "page2";
        }
    }
    ...
    Lorsque je vais sur l'adresse : http://localhost:8080/learn/jsp/bouchon.faces je vois un lien. Lorsque je click sur ce lien la méthode uneAction de monManagedBean.java est executée est selon si ma condition est vrai ou faux me renvois vers la page1 ou la page2.

    Je que je voudrais c'est avoir une url qui me permet d'appeler directement la méthode uneAction sans passer par la première page (bouchon.jsp)

    Suis-je plus clair ?

    PoichOU

  11. #11
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    ouii mais ce n'est pas possible..
    enfin je pense...
    il faut une requete au serveur pour avoir la réponse..le traitement ne se fait pas en condition des paramètres saisies..?
    j'ai l'impression que tu veu faire comme les scripts cgi...
    ou tu peu ajouter une servlet.;ta page jsp ne te sert plus à rien..et JSF aussi..

  12. #12
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Bah il faut mélanger plusieurs solutions...

    Tu peux utiliser le phase listener onload que j'ai cité plus haut.
    Dans le code JSF, si une condition particulière est (ou n'est pas) satisfaite, alors tu fais une redirection vers une page donnée, grâce à ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FacesContext.getCurrentInstance().getExternalContext().redirect("url-de-redirection");
    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

  13. #13
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    salut à vous 2.

    @romaintaz : je n'ai pas compris à quel endroit je dois mettre ce code ? dans le constructeur de mon bean ?

    @Sniper37 : il n'y a pas de paramètre saisis, je regarde en bdd si un flag est à vrai ou faux.
    Comment je peux faire en passant par une servlet ? où et comment faut-il la déclarer ?

    merci à vous

    PoichOU

  14. #14
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    bouchon.faces est la page d'accueil ??

  15. #15
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    oui pour l'instant c'est la page d'accueil mais elle ne sert qu'à aiguiller sur page1 ou page2

  16. #16
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    dans ce cas là, comme a dit romaintaz tu peux utiliser le phaselistener,
    ou ajouter un filtre qui prend la première page et fait le traitement et la redirection..

  17. #17
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    oui j'aimerai bien utiliser le phaselistener ou un filtre mais je ne sais pas ce que s'est ni comment faire. Peux-tu me dire comment utiliser un filtre ?

    merci

    PoichOU

  18. #18
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    une solution avec le phase lisneter

    etend la classe phaseListener de JSF, un exemple ici

    ensuite dans la methode afterPhase

    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
    19
    20
    21
     
    HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
     
     
    if (phaseid == PhaseId.RESTORE_VIEW || phaseid == PhaseId.INVOKE_APPLICATION) {
     
    String viewId = context.getViewRoot().getViewId();
     
    if (viewId != null && "bouchon.faces".equals(viewId)) {
     
    //traitement test et redirection
     
     
    try {
    response.sendRedirect("page1.faces");
    } catch (IOException e1) {
     
     
    }
     
    }

  19. #19
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    humm je vais tester ça dès que possible ça me plait bien

  20. #20
    Membre éclairé Avatar de PoichOU
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2006
    Messages : 328
    Par défaut
    ça marche merki à vous 2

    PoichOU

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/03/2007, 15h19
  2. Erreur : Le processus ne peut pas accéder au fichier
    Par victor72 dans le forum Dev-C++
    Réponses: 1
    Dernier message: 16/03/2007, 14h50
  3. Contrôler les exécutables avant l'execution
    Par Tchetch dans le forum Sécurité
    Réponses: 12
    Dernier message: 21/12/2006, 19h01
  4. Réponses: 3
    Dernier message: 11/08/2006, 10h08
  5. [PowerBuilder 8] Peut-on accéder à Oracle 9i ?
    Par loicmillion dans le forum Powerbuilder
    Réponses: 5
    Dernier message: 04/11/2004, 11h13

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