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 :

récupérer des valeurs d'une jsp sans utiliser une session


Sujet :

Struts 1 Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut récupérer des valeurs d'une jsp sans utiliser une session
    J'ai une jsp qui accède quelques attributs dans le request de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bean:write name="chrono" scope="request"/>
    Maintenant j'ai une action qui change quelques infos de la page mais qui nécessite la valeur de chrono. Par contre je ne veux pas la mettre dans la scope session parceque l'application peut ouvrir plusieurs onglets avec la même fonctionnalité mais de différentes valeurs pour chrono.

    Je pensais que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bean:define  id="chrono"  name="chrono" toScope="request"/>
    et ensuite dans la form de l'action une variable chrono devrait marcher mais la valeur est toujours nulle.

    Merci d'avance.

  2. #2
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Le bean:define permet de créer la variable chrono dans le scope request (soit l'équivalent d'un request.setAttribute) mais en aucun cas, ne met à jour la propriété chrono de l'ActionForm.

    Pour pouvoir mettre à jour la propriété chrono à la soumission du formulaire, tu peux par exemple passer par un champ caché :

    en J2EE 1.4 ou plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:hidden property="chrono" value="${chrono}"/>
    sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html-el:hidden property="chrono" value="${chrono}"/>
    sans oublier d'ajouter dans la jsp la directive taglib qui pointe sur la tld struts-html-el.tld.
    Modératrice Java - Struts, Servlets/JSP, ...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup, le html:hidden fonctionne.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Bonjour, j'ai une petite question additionnelle.

    Donc ce que je voulais faire marche pour un string avec un html:hidden.

    Maintenant je dois faire la même chose pour un objet, que je ne souhaite pas stocker dans la session parce qu'il peut y en avoir plusieurs en même temps.

    Selon la doc, html:hidden fonctionne uniquement avec des strings.

    Merci d'avance.

  5. #5
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Si tu ne veux pas stocker l'objet en session, je ne vois pas d'autre moyen que de passer toutes les propriétés de cet objet en champs cachés, ce qui suppose que ces propriétés sont de type String et non des objets complexes.
    Modératrice Java - Struts, Servlets/JSP, ...

  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
    Peut-être te compliques-tu la vie pour rien...
    Le problème de session / multi-fenêtre peut être géré proprement en stockant les objets en session dans une map dont la clé serait un identificateur de fenêtre (ou d'onglet en l'occurrence).
    Dans cette perspective, tu n'as qu'une session mais N zones de stockage.

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

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Ok merci pour toutes les réponses.

    L'idée de Obutterlin me semble très intéressante, je vais tenter ça.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Ca marche, en plus c'est une solution qui me plait beaucoup.

    Je garde un HashMap en session avec comme clé un int qui représente les onglets. Je fais juste passer le numéro de l'onglet dans la request et dans la jsp je le passe à l'action avec html:hidden.

    Merci beaucoup !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Je me permet de remonter ce sujet car ma question est en rapport. Si il vaut mieux que je crée un nouveau sujet, prévenez moi


    J'ai une petite question à propos du passage d'attributs dans la session.

    J'ai 3 pages jsp, que l'on va appeler 1, 2, et 3.
    1 contient un formulaire, qui lorsqu'il est validé, génère une action, et va vers 2.
    2 a aussi un formulaire, qui va vers 3.

    Ces pages gèrent la configuration de plusieurs types de fiches.

    je souhaite pouvoir gérer la configuration d'un seul type de fiche. Il me suffirait que, pour chaque page, j'ai le type de fiche de défini pour faire le traitement.

    à la premiere page, je peux donc cliquer sur un type de fiche.
    Lors de ce clic, je change une valeur dans le formulaire de ma page 1.
    et dans l'action, je vérifie si il y a une valeur, et si c'est le cas, je met le type de fiche dans l'objet request.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.setAttributes("typeDeFiche", form.getTypeDeFiche());
    Dans la page 2, un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <logic:present name="typeDeFiche">
    me permet de savoir si il y a un type de fiche, et d'agir en conséquence.


    Je souhaiterais passer le typeDeFiche entre la page 2 et la page 3 sans passer par un formulaire.

    J'ai pensé à faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bean:define id="typeDeFiche" toScope="request" value="{typeDeFiche}" />
    ça ne me déclenche pas d'exception sur la page 2, mais le typeDeFiche n'est pas chargé. En effet, dans l'action n°2, je ne trouve pas le typeDeFiche dans la requête, et donc dans la page 3, encore moins.

    Il y a t'il une solution autre que la modification du formulaire 2, ou que la mise dans la session ? (ça ne m'arrange pas de la mettre dans la session.)


    Merci d'avance.

  10. #10
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Quand la page s'affiche, la requête est terminée.
    Donc, quand tu vas soumettre le formulaire 2, il va générer une nouvelle requête et donc le valeur de typeDeFiche que tu as stocké dans le scope request sera perdue.
    Je ne vois donc que deux solutions : soit tu stockes la valeur de la propriété typeDeFiche dans la session, soit tu la passes en champ caché du formulaire 2.
    Modératrice Java - Struts, Servlets/JSP, ...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    ok, merci de ta réponse.

    J'y pensais ce midi, mais en effet, en réfléchissant au fonctionnement de l'objet request, on se rend compte que ça ne peut pas fonctionner

    je vais passer par un champ caché, ce sera aussi simple. Merci encore.

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 09/11/2011, 12h06
  2. Récupérer des valeurs d´un autre classeur sans l´ouvrir
    Par jguenot dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/05/2009, 15h43
  3. Réponses: 5
    Dernier message: 05/02/2009, 16h20
  4. Réponses: 3
    Dernier message: 23/10/2007, 13h35
  5. Réponses: 8
    Dernier message: 09/06/2006, 16h01

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