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 :

Problème de passage de paramètre par bean


Sujet :

Servlets/JSP Java

  1. #1
    Membre actif Avatar de fab76000
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 311
    Points : 294
    Points
    294
    Par défaut Problème de passage de paramètre par bean
    Bonjour a tous, je rencontre un problème dans la création d'un panier.
    Pour simplifier, j'ai une page jsp qui recoit un id passé par la requete en POST,
    dans cette page j'appelle mon bean produit comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <jsp:useBean 
      id="produit"
      scope="session"
      class="Beans.dossier.produit"
    />
    <jsp:getProperty name="produit" property="id"/>
    Le dernier getProperty est pour verifier ce qui a été inséré, le code du bean est :
    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
     
    package Beans.dossier;
     
    import java.io.*;
    import java.util.*;
    public class produit implements Serializable {
     
    private String id;
     
    public String getId() {
    	return id;
    }
     
    public void setId(String id) {
    	this.id = id;
    }
    }
    Ensuite par un lien dans la page jsp je saute a une autre page jsp, où je refait le même appel du bean produit précedent.
    Mon problème est que si je laisse les appels du bean avec le scope="session", l'id demandé n'est jamais mis a jour, le valeur de l'id reste toujours le même (le premier qu'on a cliké)..., et cela pour les deux pages appelantes le bean...??? Mais si je renleve le scope, la valeur se met a jour dans la premiere page jsp, donc c ok, mais dans la deuxieme page la valeur est toujours à null, donc problématique..
    Je vois pas d'ou peut venir mon erreur ou le problème, si quelqu'un a une idée??Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Points : 44
    Points
    44
    Par défaut
    Salut à toi fab76000.

    Solution possible :
    Moi ce que je te propose c'est de supprimer ton objet produit de ta session à la fin de ta seconde page jsp.
    Ainsi, au point de vue de la session, tu reprendra du début à chaque fois que tu validera l'ajout de ton produit à ton panier.

    Critique constructive :
    Pourquoi ne fais-tu pas tout d'un seul tenant dans la premiere JSP... N'est-il pas possible de faire tout ce que tu as à faire en un seul appel ?
    Cela te permettrai de garder les informations de ton objet dans le scope request.

    Tiens nous au courant.

    Sinon, tu peux mettre plus de détails, notre aide n'en sera que de meilleur qualité.

    Bien à toi.
    Cordialement.

    Scarz.

  3. #3
    Membre actif Avatar de fab76000
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 311
    Points : 294
    Points
    294
    Par défaut
    Merci pour ces informations mais je crois que cela ne va pas m'aider. Tout d'abord je vais donner plus de précision :
    J'ai ma page bdd.jsp :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    <%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document sans titre</title>
    </head>
     
    <body>
    <jsp:useBean 
      id="produit"
      class="Beans.dossier.produit"
    >
    <jsp:setProperty name="produit" property="*" />
        </jsp:useBean>
    <jsp:getProperty name="produit" property="id"/>
     
    <div align="left">
      <% 
    String pag = request.getParameter("id");
    String image2 = "";
    ResultSet resultats= null;
    ResultSet resultats2= null;
    String StringTmp = null;
    String StringTmp2 = null;
    String url = "jdbc:mysql://127.0.0.1/tpjava";
    String renvoi = "";
    String renvoi2 = "";
    int nbCols=0;
    int nbCols2=0;
    Class.forName("org.gjt.mm.mysql.Driver");
    Connection con = DriverManager.getConnection(url,"root","");
    Statement st = con.createStatement();
    String requete = "select image1 from article where id='"+pag+"'";
    resultats = st.executeQuery(requete);
    ResultSetMetaData rsmd = (ResultSetMetaData) resultats.getMetaData();
    nbCols = rsmd.getColumnCount();
    boolean encore = resultats.next();
    while(encore) {
                                            for (int id = 1; id <= nbCols; id++)
                                            StringTmp = resultats.getString(id);
                                            renvoi = renvoi + StringTmp;
                                            encore = resultats.next();
                            }
     
    String requete2 = "select type from article where id='"+pag+"'";
    resultats2 = st.executeQuery(requete2);
    ResultSetMetaData rsmd2 = (ResultSetMetaData) resultats2.getMetaData();
    nbCols2 = rsmd2.getColumnCount();
    boolean encore2 = resultats2.next();
    while(encore2) {
                                            for (int id2 = 1; id2 <= nbCols2; id2++)
                                            StringTmp2 = resultats2.getString(id2);
                                            renvoi2 = renvoi2 + StringTmp2;
                                            encore2 = resultats2.next();
                            }
    image2=renvoi2;
                                            
    %>
    <img src="<%=image2%>" /></div>
    <table width="743" border="0" cellspacing="0">
      <tr>
        <td width="741"><div align="center"><img src="<%=renvoi%>"/></div>
     
     
    <a href="addtocart.jsp">Add this book to the shopping cart</a>
        </td>
      </tr>
    </table>
    <p>&nbsp;</p>
    </body>
    </html>
    Cette page affiche bien l'id recu de la page précedente, mais comme dans le premier message j'explique que si j'appelle le bean produit.java avec un scope session, la valeur d'id ne change plus dès la premiere initialisation ; C'est pour cela que la solution qui m'a été proposée ne peut m'aider car même si j'efface l'objet bean a la fin de la deuxieme page, quand je suis sur la première, il affiche par exemple id=3 parceque j'ai cliké sur l'image d'id 3, mais au lieu de vouloir ajouter au panier (donc sauter a la deuxieme page) je fais "précedent" et que je clik sur l'image d'id 4 alors ma page bdd.jsp affichera toujours id=3.
    J'ai donc essayé comme dans le code présenté de ne pas mettre de scope, pour la page bdd.jsp sa marche, l'id se met a our comme il faut, mais si je décide d'ajouter au panier ; je saute a la page addtocart.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <%@ page language="java" contentType="text/html" %>
     
    <jsp:useBean 
      id="produit"
      class="Beans.dossier.produit"
    />
    <jsp:getProperty name="produit" property="id"/>
    Et a cette page l'id affiché est toujours nulle. Le seul cas ou l'id n'est pas nul c'est lorsque j'utilise le scope session dans les deux pages jsp, mais on revient au problème précedent : pas de mise a jour!!!!

    Si vous avez une idée??? Merci d'avance.

  4. #4
    Membre actif Avatar de fab76000
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 311
    Points : 294
    Points
    294
    Par défaut
    Bonsoir,

    J'aurais voulu savoir si quelqu'un aurait déja crée un panier en jsp et ejb, vu que j'ai le problème énoncé ci dessus sans solution, si quelqu'un avait une stratégie simple pour créer un panier?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 52
    Points : 44
    Points
    44
    Par défaut
    Re...

    Pour un bien, il faudrait que tu me montre ta première page (celle où on fait notre sélection de produit).

    Et au lieu de mettre la suppression de l'objet de la session dans la dernière page, as-tu essayer de la mettre dans cette première page (qui fera, de ce fait, office d'initialisation de ta cinématique d'ajout d'un produit) ?

    Aussi, pourquoi n'ajouterai-tu pas un paramètre à ton url addtocart.jsp ?
    et écrire ainsi : <a href="addtocart.jsp?id=<%=pag%>">Add this book to the shopping cart</a>

    Voila, tiens nous au courant.
    Bien à toi.

    Scarz.

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    J'ai commencé à regarder un peu ton code:

    * Pour ton pb id=null, ça c normal puisque tu utilise un scope par défaut qui est page et dans ce scope, l'id sera unique à cette page. OR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <jsp:useBean 
      id="produit"
      class="Beans.dossier.produit"
    />
    <jsp:getProperty name="produit" property="id"/>
    te donnera donc tjs null contrairement à ta première page avec laquelle tu initialise id avec le setProperty(all) et avec ton paramétre de ta request que j'imagine à 1 au début.

    * Effectivement un scope session, te donnera toujours la même valeur car une fois définie elle sera la même sauf tu modifie l'id directement mais cela ce n'est pas ce que tu veux faire.


    SOLUTION 1 celle scarz pour passer ton id, faudra la mettre dans la partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="addtocart.jsp?id=<%=pag%>"
    et à chaque fois commencer tes pages jsp par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <jsp:useBean 
      id="produit"
      class="Beans.dossier.produit"
    >
    <jsp:setProperty name="produit" property="*" />
        </jsp:useBean>
    <jsp:getProperty name="produit" property="id"/>
    SOLUTION 2 utiliser un attribut "id" de session tel que à chaque jsp tu fais
    pour reccupérer cette valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.getSession().getAttribute( "id" );
    pour mettre à jour cette valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.getSession().setAttribute( "id", "ta cinématique de ton panier");

  7. #7
    Membre actif Avatar de fab76000
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 311
    Points : 294
    Points
    294
    Par défaut
    Re
    Merci pour votre aide elle m'a été bien utile, en fait l'idée de passer le paramètre dans le lien est plus simple, car je l'ai mis au point en supprimant même le bean produit, j'espere que ce n'est pas choquant?
    C'est pour cela aussi que je ne voyais pas l'interet de mettre la définiton du bean au début de chaque page comme on me la proposé?
    Parce que sans le bean sa marche bien, pour l'instant du moins, je suis en train de terminer le panier, je représente le panier comme un tableau (dans un bean) et lorsque jeclik sur "ajouter le panier", l'id envoyer dans le lien est enregistré comme article dans le panier (j'enregistrerais plus tard d'autres informations à partir de la base de données, mais commencer par une variable est plus facile lol), ensuite je pense que le panier (défini avec un scope session) restera visible pendant toute la session si par exemple on clik sur "voir son panier"?
    Mais une chose dont vous m'avez parlé est de supprimer l'objet bean ou de le vider ( par exemple remettre le panier à 0,"vider le panier") mais je ne vois pas bien comment faire, le setProperty avec le parametre "*" ne fait pas sa??
    Si vous avez des conseils à ce sujet ou des informations?..Merci d'avance

  8. #8
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    En fait, c qu'il faut voir c que le bean ne va pas gérer juste une variable

    c pour cela que dans ton cas, la session convient (même que tu peut mettre un objet dans ta session) c juste que c plus facile à gérer une classe dans un bean que par la session (enfin pour l'instant avec mon expérience).

    Par contre si tu veux gérer un bean de A à Z, tu le fais dans d'une servlet controleur (qui gére des pages jsp par ex pour l'affichage de ton panier et des éléments du panier).

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

Discussions similaires

  1. Problème de passage des paramétrés aux entity Beans
    Par herguem dans le forum Java EE
    Réponses: 1
    Dernier message: 07/06/2012, 14h13
  2. Réponses: 7
    Dernier message: 22/07/2009, 10h20
  3. Problème passage de paramètre à un bean
    Par Niniz dans le forum JSF
    Réponses: 5
    Dernier message: 01/08/2007, 16h26
  4. Réponses: 3
    Dernier message: 29/06/2007, 17h18
  5. Réponses: 19
    Dernier message: 09/06/2006, 10h03

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