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 :

Caster un objet récupéré via request.getParameter


Sujet :

Servlets/JSP Java

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut Caster un objet récupéré via request.getParameter
    bonjour à tous !

    j'ai besoin d'un coup de pouce sur le problème suivant :

    Dans une jsp, grâce à un input hidden ayant pour valeur "mon Objet de type BRun" j'envoie vers ma Servlet et recupère cet objet avec request.getParameter("mon Objet de type BRun")

    dans la jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="runSelected" value="${run}"/>
    et dans la servlet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.out.println("request.getParameter(runSelected) : "+request.getParameter("runSelected"));
    // verif : c'est ok je le recupère bien
    Le problème est qu'ensuite je ne parvient pas à caster dans ma servlet en mon objet BRun, ce que j'ai récupéré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BRun runToDetail = (BRun)request.getSession().getAttribute("runSelected");
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BRun runToDetail = (BRun)request.getAttribute("runSelected");
    me donnent un résultat null...

    J'ai du mal à comprendre ce qui ne va pas dans cette récupération de l'objet BRun.
    Le but est que je puisse récupérer certains attributs de cet objet...

    Merci pour votre aide

  2. #2
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Au début tu récupères la valeur issue de la requête HTTP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.getParameter("runSelected")
    ce qui parait être bien ...

    mais ensuite, c'est là ton erreur, tu vas chercher cette valeur dans la session (ce qui n'est pas du tout pareil) ... et c'est normal que tu obtiennes "null".

    tu devrais écrire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BRun runToDetail = (BRun)request.getParameter("runSelected");

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    Merci pour ta réponse fxrobin.

    J'ai déjà essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BRun runToDetail = (BRun)request.getParameter("runSelected");
    mais j'ai alors une erreur "Cannot cast from String to BRun".

    J'ai l'impression que le problème vient peut-être du code côté jsp.

    Dans ma jsp j'ai en fait :
    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
     
    <c:forEach var="run" items="${sessionScope['listRunHome']}">
     
    <tr>				
    <td id="idTableDetailBody"><c:out value="${run.clientName}"/></td>
    <td id="idTableDetailBody"><c:out value="${run.matgsoc}"/></td>
    <td id="idTableDetailBody"><c:out value="${run.codbase}"/></td>
     
    <!-- pour afficher la partie details du run : (quand cliq sur "voir details") -->
    <td id="idTableDetailBody">			
    <input type="hidden" name="runSelected" value="${run}"/>
    <input type="submit" name="runSelected" style="background:transparent; border:none;cursor:pointer;"
    value='<fmt:message key="viewDetail"/>'></td>
    </tr>
     
    </c:forEach>
    En gros, je souhaite recuperer coté servlet, l'objet run detaillé dans une ligne du tableau de ma jsp, si je clique sur "voir détails".

    Je tourne autour depuis hier, et je ne vois pas la soluce.

  4. #4
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    et ça , ça renvoit quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("request.getParameter(runSelected) : "+request.getParameter("runSelected"));
    Ta page JSP devrait "poser" l'objet en session.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <% session.setAttribute(runToDetail.toString(), runToDetail); %>

    puis dans ta servlet tu peux le récupérer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String runSelected = request.getParameter("runSelected");
    BRun runToDetail = (BRun) request.getSession().getAttribute(runSelected);
    request.getSession().remove(runSelected);
    La "session" est ton seul moyen de stockage d'objets entre ta page et ta servlet.

    note : ne pas oublier de retirer l'objet de la session après sa récupération, sinon ta session va grossir pour chaque instance de BRun.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    Merci pour ton aide fxrobin.

    cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("request.getParameter(runSelected) : "+request.getParameter("runSelected"));
    me renvoie le toString de mon objet, par exemple :
    request.getParameter(runSelected) : Run : créé le : 2010/11/30
    matsoc : 0
    J'ai bien compris que je récupère qquelque chose de type string, et qu'il n'est pas possible de le parser en mon Objet BRun.
    Du coup j'ai tenté ton bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <% session.setAttribute(runToDetail.toString(), runToDetail); %>
    de même que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <% session.setAttribute("runSelected", runSelected); %>
    mais ça ne fonctionne pas, j'ai des erreurs sur ces lignes :
    - "runSelected" cannot be resolved
    - runselected cannot be resolved to a variable

    J'ai également essayer avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <% session.setAttribute("runSelected", run); %>
    car c'est ${run} l'objet que je souhaite récupérer dans ma session, mais là aussi ça ne fonctionne pas.

    Comment puis-je dans ma jsp, attribuer à ma session cet objet ${run} (et qui est un element d'une arraylist), avec du code java voire mieux avec une balise jstl ?

    Aurais-tu une idée ?

    Bonne journée

  6. #6
    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
    Les champs d'un formulaire ne contiennent que du texte, c'est pour ça que request.getParameter retourne toujours une String. Si tu as un objet à conserver entre les requetes, il faut le stocker dans la session.

  7. #7
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    comme tu es en JSTL du doit faire un c:set en scope session de ta variable.

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    @fxrobin : oui c'était exactement ce qu'il fallait que je fasse ! Et ça fonctionne

    Merci et bon 1er mai !

  9. #9
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    N'oublie pas de cliquer sur "résolu"

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    Bonjour à tous

    J'enlève le résolu car j'ai de nouveau un problème dans la continuité de celui-ci : cette fois en récupérant un objet correspondant à un choix dans une liste déroulante.

    Mon code dans la jsp avec la liste déroulante :
    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
    36
    37
    38
    <!-- liste deroulante des users existants : -->
    <form name="selectedUser" method="post" action="SAdmin" >
    <SELECT id="listAllUsers" name="selectedUser" size="1" onchange="submit();">
     
    <!-- NB : le name est ce qui sera recupere cote servlet avec request getParameter -->
     
    	<c:if test="${not empty sessionScope['listAllUsers']}">
    	<option value="" >-- Select --</option>
     
            <c:forEach var="user" items="${sessionScope['listAllUsers']}">
     
    <c:if test="${not empty requestScope.loginSelected}">
     
    	<c:if test="${user.loginUser eq requestScope.loginSelected}">
            <!-- NB : on recupere lobjet user cote servlet en le settant a la session : -->
           <option value="${user}" selected="selected" onclick='<c:set value="${user}" var="selectedUser" scope="session"></c:set>'>						
           <c:out value="${user.loginUser}"/></option>
    	</c:if>
     
    	<c:if test="${user.loginUser ne requestScope.loginSelected}">
    	<option value="${user}" onclick='<c:set value="${user}" var="selectedUser" scope="session"></c:set>'>						
    	<c:out value="${user.loginUser}"/></option>
    	</c:if>
     
    	<br/>
    </c:if>
     
    <c:if test="${empty requestScope.loginSelected}">
    	<option value="${user}" onclick='<c:set value="${user}" var="selectedUser" scope="session"></c:set>'>					
    	<c:out value="${user.loginUser}"/></option>
    	</c:if>
     
    	</c:forEach>
     
    </c:if>
     
    </SELECT>
    </form>
    Est-ce bine dans les balises options que je doit setter l'objet à ma session ?

    Mon code coté servlet :
    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
     
    // A) MODIFIER/SUPPRIMER UN USER EXISTANT :
     
     
    // 1) afficher la liste deroulante des user deja existant :
     
    	DaoUser userDao = new DaoUser(cnx);
    	System.out.println("SAdmin : userDao : "+userDao);
    	ArrayList<BUser> listAllUsers = new ArrayList<BUser>();
    	listAllUsers = userDao.findAllUsers();
    	System.out.println("SAdmin : taille de listAllUsers : "+listAllUsers.size());
    	session.setAttribute("listAllUsers",listAllUsers);
     
    	BUser userSelected = (BUser)session.getAttribute("selectedUser");
    	System.out.println("SAdmin : userSelected : "+userSelected);
     
     
    if (userSelected==null)
            {System.out.println("SAdmin : loginSelected est null");}
     
    if (userSelected != null )
    	{
    	System.out.println("SAdmin : loginSelected n'est pas null");
    	System.out.println("SAdmin : userSelected.getLoginUser : "+userSelected.getLoginUser());
    	session.setAttribute("loginSelected", userSelected.getLoginUser());	
     
    	}
    coté jsp : systématiquement dès que je clique sur un des user dans la liste, mon user sélectionné ne se maintient pas et c'est --Select-- qui se replace en tête de liste.
    coté servlet : SAdmin : userSelected : null

    La seule différence par rapport à mon problème à l'origine de ce post est que là l'objet à récupérer est dans un select...

    Voyez-vous comment faire pour que je réussisse à le récupérer dans ma servlet ?

    Encore merci pour votre aide
    Bon weekend.

  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
    onclick c'est du javascript, c'est déclenché dans le navigateur. Inutile d'y mettre un scriptlet jsp donc!

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    @tchize : merci pour ta réponse, je comprends en effet.
    Du coup j'aurai le même problème avec onchange...
    Mais comment faire alors pour setter l'objet selectionné via la liste déroulante, à la session et ensuite le récupérer dans ma servlet ?
    Bon weekend.

  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
    on ne le fait pas, tout simplement. Quand une valeur est sélectionnée dans une liste déroulante, la valeur sélectionnée fait partie des paramètres de la requete soumise lors de l'envoi du formulaire. A toi de lire cette valeur (String) et à partir de là déterminer de quel objet tu as besoin.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 55
    Par défaut
    @ tchize : merci pour ta réponse.
    J'ai donc décidé de reprendre la façon de faire plus haut : à savoir utiliser une liste d'attributs, qui sont des String, puis récupérer l'attribut sélectionné puis l'utiliser comme paramètre pour créer l'objet recherché.
    D'ailleurs, ce n'est pas plus mal, car c'est moins lourd qu'une liste d'objets avec plein d'attributs...

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

Discussions similaires

  1. Valeur null récupéré par request.getParameter
    Par maghraoui dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 25/07/2009, 16h16
  2. [jsp] request.getParameter(path d'un fichier)
    Par Stessy dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 01/04/2005, 14h18
  3. [ArrayList]transformer l'objet récupéré en double...
    Par snoop dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 16/07/2004, 16h16
  4. [struts][jsp] problème avec request.getParameter
    Par stago dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 01/07/2004, 23h52
  5. [jsp]problème avec request.getParameter(...)!
    Par fadoua dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 01/09/2003, 13h26

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