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 :

Scope request / session


Sujet :

JSF Java

  1. #1
    Membre régulier
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 114
    Points : 101
    Points
    101
    Par défaut Scope request / session
    Bonjour,
    Je me pose des questions sur le scope des Backing Bean JSF.
    Le scope session nous semble vraiment trop "gros", dans le sens où nous avons besoin souvent de transmettre des données sur 3 pages différentes mais pas plus.
    Comment faîtes vous ?
    Vous mettez tout en session et alors en production, ça passe ?

    Vous en mettez un max en request et alors quelle est la stratégie :
    - un bean session qui ramasse tout ce qu'on veut passer
    - les "managed property"
    - autre ... ?

  2. #2
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 97
    Points
    97
    Par défaut
    Eh oui la session est un couteau suisse dont on ne peut pas se passer.Pour certains cas ou les données doivent transiter entre plusieurs pages c'est nécessaires.

    0 - Cas 0
    Tu évite les sessions. par des mécanisme de valeur de requete et de inputHidden tu peux faire transiter des données entre plusieurs pages. Mais sache qu'a chaque foit des requete base vont s'imposer pour charger les données via les references conservées
    1 - Cas 1
    Tu mes tout en session et basta. tu a acces a tes données. Mais gare a ta memoire. ca peut peter

    2 Cas 2

    Si tu a un certain nombre de données. Tu n'a pas besoin de mettre tout en session. il suffit de seulement mettre les references des objets. Je prends par exemple un objet Article que tu veux faire partager par plusieurs pages. Tu n'a qu'a mettre le code de l'article en session, ainsi a chaque requete http, tu charge la données via son code que tu avais en session

    3 Cas 3
    Utilise le composant t:savestate de myfaces tomawak. Ce composant a l'avantage de te conserver la valeur d'un bean tout entier ou de valeurs particulières de ton bean.
    Mais la un tout petit piege : tu dois mettre state_saving à client, sinon ce composant va encore te sauvegarder ce bean dans ta session.
    A client, il reecrit les valeurs à sauvegarder dans ta page elle meme. J'utiliser beaucoup ce composant et il est impect.

  3. #3
    Membre régulier
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 114
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par ouedmouss Voir le message
    0 - Cas 0
    Tu évite les sessions. par des mécanisme de valeur de requete et de inputHidden tu peux faire transiter des données entre plusieurs pages. Mais sache qu'a chaque foit des requete base vont s'imposer pour charger les données via les references conservées
    Désolée mais la je ne comprends pas le " des requete base vont s'imposer pour charger les données via les references conservées" ?

    En fait c'est ce que je voulais faire mais je bloque encore en effet :
    pour liste >> édition d'une ligne >> sauvegarde, c'est ok ça marche bien.

    Par contre pour :
    nouveau >> édition du nouveau

    Là je suis pommée dans BeanNouveau j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class BeanNouveau {
     /* .....*/
     
     public String nouveau() {
        // Création du nouveau 
     
       // Comment je fais pour passer l'id du noveau à BeanEdit ???
        return "edit";
     }
    }
    Vous voyez le problème ? C'est pourtant classique ...

  4. #4
    Membre régulier
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 114
    Points : 101
    Points
    101
    Par défaut
    ok, ça n'inspire personne. J'ai mis en place une solution (très laide), j'utilise HttpServletRequest.setAttribute ...

    C'est pas terrible quand même, si quelqu'un peut me donner son avis.

  5. #5
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Tu peux lier des bean request scope à des bean session scope. Ainsi, tu travaille dans le request scope, et lors de l'action (exemple: soumettre l'article fini) tu le fait passer en sessions scope, voir en application scope

    Normalement, tu met en request scope tout ce qui concerne 1 formulaire. En session scope tu ne met que ce qui doit pouvoir être repéchable en dehors du formulaire.


    Exemple de lien:
    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
    <managed-bean>
      <managed-bean-name>addressBook</managed-bean-name>
      <managed-bean-class>jsfks.AdressBookBean</managed-bean-class>
      <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    <managed-bean>
      <managed-bean-name>personBean</managed-bean-name>
      <managed-bean-class>jsfks.PersonBean</managed-bean-class>
      <managed-bean-scope>request</managed-bean-scope>
      <managed-property>
        <property-name>owningBook</property-name>
        <property-class>jsfks.AdressBookBean</property-class>
        <value>#{addressBook}</value>
      </managed-property>
    </managed-bean>
    la section "value" du managed property peut prendre ce qu'elle veut, c'est une expression language qui est évaluée quand on crée le bean. Donc un request scope bean peut très bien référence des variable de la session ou des paramètres de la requete. On peut ainsi facilement transférer des datas via les paramètres de requete.

    Regarde aussi auprès des librairie tomahawk, il y a un composant pour sauver des beans dans le formulaire et les faire transiter vers la requete suivante.

    Regarde aussi le projet "Shale", qui a un scope intermédiare, le scope "conversation" qui est persistant entre plusieurs formulaire mais est nettoyé à la fin. C'est en fait un scope session auto nettoyé

  6. #6
    Membre régulier Avatar de maVariable
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 105
    Points
    105
    Par défaut
    hello,

    désolé si je ne suis pas dans le bon post, mais je suis débutant en JSF, et j'ai été interpellé par :

    1 - Cas 1
    Tu mes tout en session et basta. tu a acces a tes données. ...
    Je souhaiterai faire en sorte qu'un utilisateur se connecte à mon appli au début, puis que son profil (donc son nom, son prénom, etc...) soit accessible durant toute sa navigation, quelque soit sa page. Mais je ne sais pas trop comment faire ca... avec un bean CurrentUser, ou sans bean, je ne sais pas.. pourriez vous m'en dire un petit peu plus svp ? merci d'avance

    nb : d'après ce que j'ai déjà pu voir, il me faudrai un bean dont le tag <managed-bean-scope> soit mis à "application". Je vais dans la bonne direction ?

  7. #7
    Membre régulier
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 114
    Points : 101
    Points
    101
    Par défaut
    Il te faut un bean session pour ça et surtout pas application. Le scope application est utile pour des données génériques à l'application et donc ce sont les mêmes pour tous les utilisateurs, ce n'est pas ça que tu veux.

  8. #8
    Membre régulier Avatar de maVariable
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 105
    Points
    105
    Par défaut
    Merci bcp

    j'ai effectivement fais quelques tests, et j'ai pu observer le rendu des différents modes ^^, et session correspond mieux à ce que je veux

    encore merci

Discussions similaires

  1. Scope request vs session
    Par programaniac dans le forum Struts 1
    Réponses: 4
    Dernier message: 21/09/2011, 16h46
  2. Session mais avec un SCOPE request
    Par blbird dans le forum Struts 2
    Réponses: 2
    Dernier message: 27/08/2009, 16h36
  3. [scope] request ou session ?
    Par phoebe dans le forum Struts 1
    Réponses: 27
    Dernier message: 19/07/2007, 00h39
  4. Scope Request et paramétre
    Par Shivan dans le forum JSF
    Réponses: 5
    Dernier message: 13/10/2006, 17h34
  5. [JSP SERVLET]Moment d'expiration des objets du scope Request
    Par Little_Goldo dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 25/08/2005, 13h18

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