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

Servlets/JSP Java Discussion :

Transfère objet JSP vers Servlet


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut Transfère objet JSP vers Servlet
    Bonjour a tous

    Je pense que se sujet a été posé plusieurs fois mais j'aimerai la préciser.

    Je viens du monde ASP.NET et j'ai un peu de mal avec la vision J2EE.

    Mon problème est que je voudrais transférer un objet d'une page JSP vers une servlet.

    En fait, au chargement de ma page, je charge une servlet qui me déclare mon objet (récupère des données dans une BDD) que j'envoie ensuite dans ma jsp pour pouvoir l'utiliser (crée un tableau à plusieurs page) grâce a ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    req.setAttribute("MyObject",new MyObject());
    ServletContext sc = getServletContext();
    RequestDispatcher rd = sc.getRequestDispatcher(url);
    rd.forward(req,resp);
    Ensuite imaginons que je veuille changer de page dans le tableau généré. J'ai justement gardé le résultat de ma dernière requête (avec mes whereclause...) dans mon objet. Je n'ai donc pas besoin de refaire la requete puisque j'ai déjà le résultat précédent. Comment faire pour que la servlet récupère l'objet qu'il a lui même crée pour me donnée la suite des données.

    J'ai lu pas mal de forum est le moyen récurent est d'utiliser la variable de session, se qui ne me satisfait pas. En effet, imaginons que sur 2 onglet je charge la meme page. Elles vont toute 2 utiliser le meme nom de variable dans la session et je ne pourais stocker que l'objet du dernier chargement.

    J'ai cherché au niveau des beans mais je ne penses pas que se soit la solution.

    En .NET je n'ai pas a me posé la question puisque le code behind simplifie grandement la tache! (relation direct entre la vue et le contrôleur)

  2. #2
    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
    Il suffirait de stocker ton objet dans la session plutôt que dans request.
    Ta servlet n'aurais plus qu'à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    MonObjet monObjet = (MonObjet)request.getSession().getAttribute("MonObjet");
    if (monObjet == null)
    {
       monObjet  = new MonObjet(...);
       request.getSession().setAttribute("MonObjet", monObjet);
    }
    ... plus rien de spécifique pour l'objet
    Dans la page, il faudra préciser que l'objet est en session plutôt que request.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut
    oui mais qu'arrive t'il si la même page est utilisé dans le même navigateur (2 onglet différent et la même page chargé)

    L'objet en session est partagé entre les 2 onglets? Il est la mon problème. Ca me gène d'utiliser un même objet pour 2 pages différente.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut
    Bon finalement je me suis résolue a utiliser la session.

    Je crée un objet dans ma servlet que j'envoie dans la session
    J'utilise un bean pour le récupérer dans ma JSP et afficher mon tableau
    Et au retour dans ma servlet j'utilise l'objet qui est resté en session et en fonction des paramètre GET/POST qui contient une variable action, je fais se qu'il faut.

    Je ne me trompe pas dans ma démarche?

  5. #5
    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
    Ça peut être une manière de faire, mais il me semble qu'il reste un problème dans le cas où les paramètres des 2 "onglets" ne sont pas les mêmes et que la liste résultante n'est pas la même.

    Personnellement, j'utilise un identificateur de fenêtre que j'utilise comme clé d'une map sauvegardée en session.
    Comme ça, tout est indépendant. L'onglet 1 aura (par exemple) un id="TAB1", l'onglet 2 un id="TAB2".
    L'accès aux données se fera comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Map<String, Object> map = (Map<String, Object>)request.getSession().getAttribute("SessionMap");
     
    String idFenetre = request.getParameter("WindowID");
    MonObjet unObjet = (MonObjet)map.get(idFenetre);
    ...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut
    Effectivement merci pour l'astuce.

    Par contre, comment identifier un onglet. Lui donner un nom n'est pas le problème, mais l'identifier en est un.

    Tu envois le numéro d'onglet dans l'adresse en GET?

    La démarche serai la suivante : la servlet défini un id si getAttribut renvoi null, et sur les lien (<a>) des actions de la page jsp (qui renvoi sur la même page), tu lui colles en GET (donc dans l'adresse) son id?

    Désolé pour les questions peut être bette mais le passage de .NET a J2EE est assez violant! ^^

  7. #7
    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 principe, c'est ça.
    Dans les liens, on rajoute l'id, pour les formulaires, on utilise un champ caché (<input type="hidden"/>)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut
    ok Merci de l'aide

Discussions similaires

  1. liaison jsp vers servlet vers jsp
    Par wafabrj dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/06/2012, 16h07
  2. envoi de donnée de jsp vers servlet
    Par alen22 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 05/04/2011, 22h04
  3. lien jsp vers servlet avec passage de parametre
    Par cool dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 15/05/2008, 22h59
  4. Transmission d'un objet jsp vers mon ActionForm
    Par Ryo_san dans le forum Struts 1
    Réponses: 5
    Dernier message: 17/12/2007, 09h01
  5. [Debutant] Données nulles de JSP vers Servlet method Post
    Par tck-lt dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 18/12/2006, 11h53

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