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

Struts 1 Java Discussion :

[scope] request ou session ?


Sujet :

Struts 1 Java

  1. #1
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut [scope] request ou session ?
    Bonjour à tous,
    tout est dit dans le titre... je n'arrive pas vraiment à savoir pourquoi utiliser plus l'un ou l'autre donc j'aimerais avoir vos avis sur la question.

    Généralement, pour vos développement vous mettez vos Form en Session ou en Requête ?

    d'avance merci !

  2. #2
    Membre actif Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Points : 228
    Points
    228
    Par défaut
    Personnellement , pour partager des données entre divers formulaire , j'utilise le scope session sinon entre deux formulaires request est sufisante.
    La sagesse des hommes ne tient pas à leur expérience, mais à leur aptitude à l'expérience.


  3. #3
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    en fait j'utilise un LookupDispatchAction et j'ai une List dans mon Form que j'aimerais ne charger qu'une seule fois, est-ce possible avec un scope request ?

    parce qu'à chaque fois que je passe dans mon action la List est à nouveau vide, et donc actuellement je suis obligé de refaire une requête en base pour recharger la List...

  4. #4
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    C'est possible sous certaines conditions, mais il faut comprendre qu'avec le scope request, ton formulaire est instancié à chaque nouveau request (donc, en théorie, tu recharges ta liste à chaque fois)...
    Cependant, si ta liste est sauvegardée en session (uniquement la liste j'entends), tu peux très bien l'affectée par la méthode reset à ta liste de l'ActionForm.
    En pratique, le scope session semble mieux adapté pour ça (encore que...ça dépend des cas...)

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    Si toutes les actions de mon application sont en scope session, ça ne risque pas de surcharger inutilement la session et donc de ralentir l'application ?

  6. #6
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Tu veux dire tes formulaires je suppose...
    Bon, c'est sûr que tu charges la session mais de là à ralentir l'application, je ne crois pas, au contraire, l'extraction de données d'une base est bien plus coûteux
    La session peut aussi avoir des inconvénients :
    si ton poste client ouvre 2 navigateurs, par défaut, ils auront la même session, donc attention aux écrasements de valeurs.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    oui je voulais dire les formulaires en effet...

    Je viens de lire sur le net que le scope session n'est utile que lorsque plusieurs actions se partagent un formulaire, or dans mon cas je n'ai qu'une action mais c'est une DispatchAction, donc on pourrait considérer qu'il s'agit de plusieurs actions non ?

  8. #8
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Oui, si on veut... plusieurs "actions" qui partagent la même définition (struts-config.xml)

    L'utilisation (type) de la session serait du genre :

    Action1 -> Page1 -> Action2 -> Page2 -(retour)-> Page1

    Avec request, à ton retour sur Page1, il n'y aura plus de données (c'est bête )
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    actuellement mes formulaires sont tous en scope request et les attributs de mon formulaire sont uniquement les données que l'utilisateur peut renseigner sur la page de saisie, je place les listes en session, est-ce une bonne démarche ?

  10. #10
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Comme dit, ça peut être la bonne solution, tout dépend de ce que tu feras par la suite en terme de navigation...
    Pour ce qui est de l'optimisation de ressources DB (en l'occurence tes listes) associées au formulaire, oui, c'est clairement une bonne solution.
    Si tes listes sont figées, tu peux même passer au scope serveur plutôt que session, là, ce sera le ponpon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Pour y accéder
    System.getProperties().get("maListeFigee1")
     
    // Pour la mettre en scope serveur
    System.getProperties().put("maListeFigee1", maListe1);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    scope serveur ??

    tu veux dire ApplicationContext je suppose...

  12. #12
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    Bon en fait je vais présenter la fonctionnalité que j'essaie de développer actuellement :
    J'ai donc un écran avec 3 tableaux, lorsque je sélectionne une ligne du premier tableau le deuxième tableau est mis à jour et lorsque je sélectionne une ligne du deuxième tableau le troisième tableau est mis à jour et enfin quand on sélectionne une ligne du troisième tableau alors des champs de saisie apparaissent dessous les tableaux avec un bouton valider.

    Comment feriez vous cela ? dans les grandes lignes...

  13. #13
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    1) oui pour ApplicationScope
    2) dans les grandes lignes alors :

    Solution 1 :

    Si les questions sont fixes, je les mettrais dans ApplicationScope.
    Ensuite, pour la suite d'écran, le scope request va très bien (par contre, j'interdirais de modifier la liste correspondant à la question source -> il y a le back pour revenir, sinon, il faut gérer onchange...) avec dans la méthode reset l'affectation de la liste qui va bien.

    Pour ce qui est de l'écran de fin, si les paramètres dépendent des questions précédentes, j'utiliserais des include ou mieux, des tiles.


    Solution 2 :

    j'utiliserais AJAX pour le chargement des listes et le chargement des attributs à la fin.
    L'avantage, tu ne gèrerais plus qu'une seule page.
    L'incovénient, c'est plus lourd à mettre en place


    Solution 3 :

    Si le volume global des listes n'est pas trop important, tu peux aussi gérer des listes dépendantes avec du javascript.
    En gros, tu envoies tout pour construire des objets javascript et tu construits les listes à la volée en fonction des choix de l'utilisateur.
    L'avantage, il n'y a plus d'aller/retour au serveur jusqu'à la validation
    L'inconvénient, c'est plus lourd

    Il y aurait d'autres possibilités, voir des mixes, mais bon, on ne va pas faire de liste exhaustive non plus
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    bon alors je précise un peu, quand je dis 3 tableaux dépendants les uns des autres il s'agit de trois listes (entêtes sur la première ligne puis 3 à 4 colonnes dans chaque liste) les listes sont dépendantes du référentiel donc nécessite une requête en base pour les charger.

    point important : les 3 listes sont sur une même et unique page


    et on oubli Ajax, je souhaite faire sans... c'était possible avant donc ça doit toujours être possible.

  15. #15
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    C'est un traitement du genre :

    liste1 = en-tête de commande
    liste2 = lignes d'une commande
    liste3 = lots choisis par article

    que tu veux faire ?

    Si oui, ça change un peu les données et du coup, j'utiliserais le scope session (pour ne pas recharger les listes au-dessus tout le temps et limiter les accès DB)
    avec une gestion de sélection de ligne par tableau (un truc que struts-layout rend assez simple en fait) et une action différente en fonction du niveau d'appel (en-tête, ligne, lot), avec LookupDispatchAction c'est OK (perso, j'utilise DispatchAction, je trouve ça plus intuitif)

    (et effectivement, on peut oublier ajax)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    oui c'est ce genre de listes dépendantes que je souhaite faire et en fait j'utilise DispatchAction et non LookupDispatchAction.
    Donc en fait il faut que je déclare mon action avec un scope="session" dans mon struts-config.xml si je comprend bien et mon Form sera alors :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    public class RefForm extends AbstractForm {
     
    	private String	indexSelected_1;
    	private String	indexSelected_2;
    	private String	indexSelected_3;
     
    	private List liste_1;
    	private List liste_2;
    	private List liste_3;
     
     
        public RefForm() {}
     
        public void reset(ActionMapping mapping, HttpServletRequest request) {
            super.reset(mapping, request);
            indexSelected_1 = "";
            indexSelected_2 = "";
            indexSelected_3 = "";
            liste_1 = null;
            liste_2 = null;
            liste_3 = null;
        }
     
        public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
            ActionErrors errors = new ActionErrors();
     
            if (getDispatch() != null && getDispatch().equals("ref_valider")){
            	//Vérification des données saisies par l'utilisateur
            	//...
            }
     
            return errors;
        }
    }
    c'est bien ça ?

  17. #17
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Surtout pas !
    Avec le scope session, il ne faut pas remettre tes listes à NULL ou tes valeurs sélectionnées dans reset (il faut juste ne pas oublier de faire un "clear" sur les "sous-listes" et les valeurs sélectionnées associées quand tu charges un élément au-dessus, mais dans tes actions)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    donc avec un scope="session" on utilise pas du tout le reset ?

  19. #19
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    en l'occurence, non
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  20. #20
    Membre habitué Avatar de phoebe
    Inscrit en
    Août 2003
    Messages
    289
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 289
    Points : 143
    Points
    143
    Par défaut
    OK merci, je pense que je vais utiliser un scope session pour toutes mes actions, ça sera moins compliqué et donc gérer le "reset" dans mes Actions.

    en tout cas un grand merci pour tes lumières

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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 / session
    Par cocoyot dans le forum JSF
    Réponses: 7
    Dernier message: 02/06/2008, 16h39
  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