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 :

Attribut URL dans un ManagedBean


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Par défaut Attribut URL dans un ManagedBean
    Bonjour,

    Je souhaite récupérer un attribut passé par URL directement dans un managedBean et, si l'attribut n'est pas null (car on peut aussi ne pas mettre cet attribut dans l'URL), le traiter. J'ai vu pas mal de méthodes sur inernet, mais elles se contredisent régulièrement et je n'arrive pas à savoir ce que je doit mettre dans chaque fichier

    Je voudrait donc que quand on écrit http://monUrl/maPage?id=test, mon ManagedBean récupère cet id. Est ce que je doit écrire quelque chose dans le faces-config.xml pour déclarer l'id ? Et comment est-ce que je dis à mon bean que l'id vient de l'URL ?

    Actuellement je peux juste afficher ma variable id dans ma page xhtml, mais pas moyen de l'envoyer dans le bean au chargement d'une nouvelle page Si quelqu'un pouvait éclairer ma lanterne, merci !

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Par défaut
    Bonjour,

    il suffit juste d'utiliser l'annotation suivante:

    Si le paramètre est id:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @ManagedProperty(value="#{param.id}")
        private Integer id;
    Si le paramètre est qqch:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @ManagedProperty(value="#{param.qqch}")
        private String qqch;
    Il ne faut pas oublier les getter et setter et ça s'utilise normalement dans ta page JSF.

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Par défaut
    C'est effectivement la méthode que j'avais essayée mais lorsque je fais ça j'ai une erreur ("Erreur inattendue lors du traitement du bean géré 'monBean'")

  4. #4
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    avec ton URL: monUrl/maPage?id=test,
    il faudra:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <managed-bean>  
            <managed-bean-name>bean</managed-bean-name>  
            <managed-bean-class>com.example.Bean</managed-bean-class>  
            <managed-bean-scope>request</managed-bean-scope>  
            <managed-property>  
                <property-name>id</property-name>  
                <value>#{param.id}</value>  
            </managed-property>  
        </managed-bean>
    et dans ta bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @ManagedProperty ("{id}")  
        private String test1;
    il faudra s´assuerer que le scope soit REQUEST.

    cela devrait marcher.

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Par défaut
    Merci,

    Mais si j'ai besoin que le scope soit en session, je ne peux pas le laisser comme ça ? De plus, mon bean est déjà appelé dans un autre bean, ça ne risque pas de poser problème en mettant la partie XML ?

  6. #6
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Bonjour,

    Je crains qu'il faudrait plutôt "http://monUrl/maPage?id=int" et garder l'option String pour un éventuel "http://monUrl/maPage?nom=test"

  7. #7
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Par défaut
    Le choix d'un int ou d'un String pourra être fait après, pour le moment le problème c'est de récupérer la variable du coup ^^"

  8. #8
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Et si le paramètre ne correspond pas au type de la variable tu vas faire comment?

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Voici une solution qui te permet de garder ton scope session.
    Dans la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <ui:compositon ...>
    
        <f:metadata>
            <f:viewParam name="uid" value="#{outilsManager.uid}"/>
            <f:event listener="#{outilsManager.preRenderView}" type="preRenderView"/>
        </f:metadata>
    
    ....
    Dans le ManagedBean (ici "outilsManager")
    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
    22
    23
    24
    25
    @ManagedBean(name = "outilsManager")
    @SessionScoped
    public class OutilsManager extends AbstractManager
    {
        private Integer uid;
    ...
        public Integer getUid()
        {
            return uid;
        }
    
        public void setUid(Integer uid)
        {
            this.uid = uid;
        }
    ...
        /*
         * Cette méthode sera automatiquement appelée, à toi d'y mettre le code voulu
         */
        public void preRenderView()
        {
            display(uid);
        }
    ...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Par défaut
    Merci OButterlin, ça marche ! Et Mishulyna, tu as raison mais ça je peux m'en occuper maintenant que ça marche (ce que je ne savais pas faire, c'était récupérer ma variable)

    Merci à tous !

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    C'est suicidaire de remplir un bean Session avec un paramètre qui est request scope. Même si la proposition de OButterlin permet d'injecter la valeur, il y a toujours le problème de la concurrence à régler. Si l'utilisateur (comme je suis) fait des clics molette sur trois liens de ta page pour les ouvrir dans 3 onglets, tu va avoir 3 pages qui vont se battre simultanément pour définir la valeur dans la session. Résultat, tu va avoir des rendu qui seront 1/3 dans une valeur, 1/2 dans une autre et 1/6 dans une troisième. Bonjour le bordel et la sécurité avec ça! Les paramètres c'est liée à la requête, ça doit être traité comme tel. Si ton bean est de scope session, tu crée un autre bean de scope request pour gérer ton paramètre et tu utilise ce bean là où tu as des choses dépendantes du paramètre.

  12. #12
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Dans le fond, tu as raison, mais il faut bien reconnaître que la techno web a une grosse lacune du point de vue des scopes en matière de découpage fonctionnel.
    Ce qui rend presque nécessaire le scope session pour un détail (qui devrait être request, je suis d'accord), c'est l'interface entre ce détail et d'autres pages.
    Dans le cas détailA appel détailB, détailB revient à détailA, c'est super chiant à gérer parce qu'il faudrait que détailB soit capable de recréer détailA dans l'état précédent l'appel. Si des modifications avaient été faites dans A, je ne vois pas trop comment les restaurer à partir de B (ou alors c'est vraiment un gros bordel, surtout si B peut être appelé de plusieurs sources)

    Mais si tu as une idée, ça m'intéresse
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Je ne comprend pas trop le sens de ta question. Tu veux savoir comment passer un état de la page A à la page B en restant en scope request?

  14. #14
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Oui, état au sens large... ma problématique est de conserver la valeur de champs non encore persistés d'une page A au retour d'une page B, qui elle même peut être appelée de plusieurs endroits...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Si à chaque fois que tu veux réafficher la page A avec ses même données (puisque si je comprends bien, quel que soit le chemin, ce sera le même résultat), tu stocke en session, je ne vois pas le problème.

    Ici, le problème, c'est qu'on peux afficher la page A, avec un ?id=.... différent, et qu'on stocke cet id en session. Deux pages simultanée, dans ce cas ci, doivent donnée deux résultats distinct, contrairement au problème que tu expose.

    Pour moi, session ne veux pas dire "permanent", juste "peux importe d'ou je demande, j'ai le même résultat". Si ce que tu as en session dépend de ta requete, alors ça doit pas être en session

  16. #16
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Pour moi, il n'y a pas de problème avec l'id dans l'url, ce n'est qu'un moyen parmi d'autres d'initialiser le managedBean associé à ma page.

    Généralement, je prévois :
    - une méthode recevant l'id de l'enregistrement
    - l'enregistrement
    - un paramètre dans l'url

    Mais à l'arrivée, je stocke en session l'enregistrement, rien d'autre
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. URL dans l'attribut "href"
    Par je-suis-moi dans le forum Langage
    Réponses: 7
    Dernier message: 05/08/2008, 17h56
  2. Afficher une image sans URL dans un forum
    Par Vanesse dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 01/03/2006, 17h55
  3. [HTML][Firefox] Attribut maxlenght dans une balise Text
    Par charlot44 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 13/07/2005, 09h34
  4. [FLASH MX] Variable URL dans un champ texte
    Par furet92 dans le forum Flash
    Réponses: 4
    Dernier message: 07/02/2005, 14h26
  5. [jsp][jetty]recuperer l'url dans la barre d'adresse
    Par maxvador dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 07/06/2004, 14h33

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