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 :

Fichier JSP avec servlet et formulaire


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 64
    Points : 41
    Points
    41
    Par défaut Fichier JSP avec servlet et formulaire
    Bonjour,

    J'ai une question toute bête mais qui me donne du fil à retordre depuis pas mal de temps.

    J'ai créé un fichier jsp dans lequel j'appelle une servlet. Tout marche bien.

    Depuis que j'ai rajouté un formulaire dans ce fichier, le résultat de la servlet apparaît lors du chargement de la page mais n'apparaît plus dès lors que l'on a validé une fois le formulaire....

    Voici le code pour éclaircir ces explications

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <HTML>
    <HEADER>
    <TITLE>Test</TITLE>
    </HEADER>
    <BODY>
    <H2>Test de page avec formulaire et servlet</H2>
    <FORM ACTION="rapport.jsp" METHOD=POST>
    <INPUT type="text" name="choix" value="">
    <input type="submit" value="Valider">
    </form>
    <jsp:include page="servlet/tableau1?annee=2005"/>
    </body>
    </html>
    Quelqu'un aurait-il une idée ? Ce doit être tout bête mais je ne trouve pas
    Est-ce dû à l'adresse relative de la servlet qui n'est plus valable après rechargement du formulaire ???

    Mille mercis par avance pour votre aide !

    Axel

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Voici le code de la 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
    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
    75
    76
     
    package demo;
     
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.sql.*;
     
    public class tableau1 extends HttpServlet {
     
    public Connection con;
    public String maRequeteSql ="";
    public String driver;
    protected String url;
    public ResultSet monResultSet=null;
    public Statement stmt=null;
    public ResultSetMetaData rsmd=null;
     
    public void init() {
    }
     
    public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
    String annee=req.getParameter("annee");
     
    res.setContentType("text/html");
    PrintWriter out = res.getWriter();
     
    url = "jdbc:mysql://localhost/db1";
     
    try{
    Class.forName("com.jdbc.mysql.Driver");
    }
    catch (ClassNotFoundException e) {
    System.err.print("ClassNotFoundException: ");
    System.err.println(e.getMessage());
    }
     
    try{
    con=DriverManager.getConnection(url, "user", "user");
    stmt=con.createStatement();
    maRequeteSql="SELECT AestheticLine AS C1, COUNT(ID) AS C2 FROM dbo_repairs_database T0 GROUP BY AestheticLine ORDER BY C2 DESC";
    monResultSet=stmt.executeQuery(maRequeteSql);
     
    out.println("<table border=1 bordercolor=#C0C0C0 cellspacing=\"0\" cellpadding=\"4\">");
    out.println("<tr>");
    out.println("<td>Ligne produit</td>");
    out.println("<td>Nb. réparations</td>");
    out.println("</tr>");
    while (monResultSet.next()) {
    out.println("<tr>");
    out.print("<td>");
    out.print(monResultSet.getString(1));
    out.print("</td>");
    out.print("<td>");
    out.print(monResultSet.getInt(2));
    out.print("</td>");
    out.print("</tr>");
    }
    monResultSet.close();
    stmt.close();
    con.close();
    }
     
    catch (SQLException e) {
    System.err.print("SQLException: ");
    System.err.println(e.getMessage());
    }
     
    catch (Exception e) {
    System.err.print("Exception: ");
    System.err.println(e.getMessage());
    }
    out.println("</TABLE>");
    }
    }
    C'est une servlet toute simple qui extrait des données d'une base et renvoit un tableau. Pour l'instant le paramètre année qu'elle récupère n'a aucun effet (je regard déjà si ça marche avec un code basique)

    Merci par avance pour votre aide

  3. #3
    Membre actif
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Points : 276
    Points
    276
    Par défaut
    slt,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <FORM ACTION="rapport.jsp" METHOD=POST>
    en submittant le formulaire, tu va appeler la page rapport.jsp, donc la jsp courant va etre detruite, et le server te renverra le contenu de rapport.jsp. Il faudrait que tu include ton tableau dans la page résultante

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par vahid
    slt,
    en submittant le formulaire, tu va appeler la page rapport.jsp, donc la jsp courant va etre detruite, et le server te renverra le contenu de rapport.jsp. Il faudrait que tu include ton tableau dans la page résultante
    Merci pour ta réponse... mon problème est alors que je souhaite avoir sur la même page le formulaire ainsi que le tableau résultant de l'appel de la servlet, afin de pouvoir changer le paramètre et que la page se rafraichisse automatiquement... comment faudrait-il faire alors ? Avec des beans ?

  5. #5
    Membre actif
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Points : 276
    Points
    276
    Par défaut
    Un ptit exemple de l'évolution de l'inclusion de la jsp ? j'ai pas tout compris

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    Concrêtement, si dans ta première page tu inclus ta servlet comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jsp:include page="servlet/tableau1?annee=2005"/>
    Pour avoir le meme tableau une fois ton formulaire soumis, il te suffit de la réinclure tout simplement dans "rapport.jsp" via la même syntaxe.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Je me suis peut être mal exprimé...

    en fait je pars d'une page d'accueil, index.jsp, où un formulaire demande la saisie d'un paramètre puis redirige vers le fichier rapport.jsp

    Puis, ma servlet affiche son résultat dans rapport.jsp.

    Maintenant, j'aimerais que le formulaire apparaisse encore dans le fichier rapport.jsp, et que l'on puisse modifier le paramètre et que la servlet renvoie un nouveau résultat.

    Je pense que ce doit être possible en jsp....

    Mais je n'arrive pas à trouver le bon moyen de l'implémenter...

  8. #8
    Membre actif
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Points : 276
    Points
    276
    Par défaut
    Donc si j'ai bien compris :
    1. ton formulaire envoie par POST ou GET la valeur selectionné
    2. rapport.jsp include une page dépendante de cette valeur.

    Tu peut récuperer les parametres en jsp et les afficher de la sorte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%= request.getParameter(%paramName%) %>
    Comme ca l'url allant taper dans ta servlet peut contenir des parties dépendantes des valeurs envoyées par formulaire

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Merci bcp pour ta réponse.

    J'avais effectivement trouvé cette syntaxe pour récupérer la valeur du paramètre saisi dans le formulaire.

    Le problème est que si je rechange le paramètre du formulaire et reclique sur submit, la servlet n'affiche plus rien.... même si je change l'url de la servlet en remplaçant <%= request.getParameter(%paramName%) %> par un paramètre fixe ("2005" en l'occurence).

    Et c'est ça que je n'arrive pas à faire : avoir une page jsp avec un formulaire en haut de page, que je peux modifier plusieurs fois avec en-dessous sur cette même page le résultat de la servlet qui s'adapte aux valeurs du paramètre...

  10. #10
    Membre actif
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Points : 276
    Points
    276
    Par défaut
    Le problème est que si je rechange le paramètre du formulaire et reclique sur submit, la servlet n'affiche plus rien
    Je ne comprend pas vraiment ce que tu souhaite faire.
    Si tu sumbit ton formulaire, les parametres vont etre envoyés dans la request. A ce moment la, la target du form (rapport.jsp) va etre réévaluée coté server avec les parametres transmis.
    En d'autres termes, request.getParameter(%paramName%) contiendra bien les nouvelles données submitées (enfin la nvelle donnée).

    avoir une page jsp avec un formulaire en haut de page, que je peux modifier plusieurs fois avec en-dessous sur cette même page le résultat de la servlet qui s'adapte aux valeurs du paramètre...
    C'est surement ca la clé de ton probleme mais j'ai pas du bien comprendre. essai de me décrire en étape ce que tu as et ce que tu souhaite avoir, a moi que le processus que je t ai decrit ci dessus reponde a ton besoin

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Merci beaucoup pour ton aide !

    En fait voici deux images pour illustrer très simplement mon problème

    J'ouvre le jsp, mon tableau s'affiche


    Maintenant je change le paramètre, je clique sur valider ... et le tableau disparaît


    Je n'arrive pas à comprendre.....
    Si quelqu'un a une idée ...

  12. #12
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Points : 412
    Points
    412
    Par défaut
    ok j'ai compris enfin je crois
    bon avec ta servlet tu met des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while (monResultSet.next()) {
    out.println("<tr>");
    out.print("<td>");
    out.print(monResultSet.getString(1));
    out.print("</td>");
    out.print("<td>");
    out.print(monResultSet.getInt(2));
    out.print("</td>");
    out.print("</tr>");
    }
    A mon avis si tu mets
    out.print(monResulSet.getString(1).toString());
    et
    out.print(monResultSet.getInt(2).toString());

    ca marchera, enfin j'espère

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Salut !

    Merci beaucoup pour ta réponse.
    Malheureusement j'ai une erreur de compilation avec
    Citation Envoyé par Philcmoi
    out.print(monResultSet.getInt(2).toString());
    Message d'erreur : int cannot be dereferenced

  14. #14
    Membre actif
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Points : 276
    Points
    276
    Par défaut
    Salut
    Tu es sur que du coté server, tu récupère bien l annee ?
    Si oui, ton resultset contient bien des données ?

  15. #15
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Points : 412
    Points
    412
    Par défaut
    Rebonjours, je me suis coucher tard hiers soir donc la réponse ne vient que maintenant.
    stp essais :
    out.print(Integer.valueOf(monResultSet.getInt(2)).toString);
    Désolais j'avais pas vérifier que ...getInt donner un int et non un Integer.
    J'éspère que ca marchera.

  16. #16
    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 getInt renvoie un int, c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    out.print(Integer.toString(monResultSet.getInt(2)));

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Merci beaucoup pour vos réponses, c'est super sympa !

    @Philcmoi : malheureusement ça ne marche toujours pas. Le fichier java se compile, mais même problème ensuite : la servlet affiche le tableau au premier appel mais plus ensuite

    @vahid : oui, je suis sûr que mon resultset n'est pas vide car pour éliminer cette source d'erreur, la servlet récupère l'année mais n'en fait rien. Et puis même si le resultset était vide, la servlet devrait au moins afficher les entêtes des colonnes du tableau...

    C'est vraiment un mystère....

  18. #18
    Membre actif
    Avatar de vahid
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 228
    Points : 276
    Points
    276
    Par défaut
    la servlet récupère l'année mais n'en fait rien
    Donc pr resumer tu es sur et certain que ca apsse dans la servlet qui récupère bien l annee. La servlet execute aussi les out.print() (tu as tester ca je suppose) mais rien ne s affiche dans la jsp.

    As tu essayer out.flush() et out.close() a la fin de ta servlet pour balancer le contenu du printwrriter ?

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 64
    Points : 41
    Points
    41
    Par défaut
    Oui le paramètre est bien transmis à la servlet : en rajoutant une instruction out.println("annee choisie"+annee") il me renvoie bien mon résultat ... mais là aussi si je reclique sur le bouton valider du formulaire plus rien ne s'affiche ensuite

    J'ai essayé de rajouter le out.close() . Je l'avais effectivement oublié, et j'ai bien cru que mon problème était résolu ... malheureusement le bougre est coriace, rien n'y fait.

    J'ai rajouté à la fois out.flush(); et out.close(); à la fin de ma servlet.

    Et dans le jsp j'ai modifié l'appel en rajoutant flush="true" à la fin du jsp:include
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jsp:include page="servlet/tableau1?annee=<%=param%>" flush="true" />
    Mais rien n'y fait, je ne comprends plus rien.

    Pourtant j'ai fait une manip similaire avec une servlet qui extrait des données d'une BDD puis renvoie un graphique (sous forne d'image png) et ça se met nickel à jour autant de fois que je change le paramètre du formulaire jsp et que je clique sur valider.... mais ce tableau il ne veut pas jouer le jeu, je ne sais pas pourquoi...

  20. #20
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Points : 412
    Points
    412
    Par défaut
    Axel119 salut en fait tu pointes toujours sur ta même servlet (que j'appel MaMêemeservletDeCalcul).
    Je te propose de pointer sur la meme page jsp (ou tu recreéras ton tableau)depuis ta servlet par requestDispatcher("mamêmepagejsp").forward(request,respond).
    Puis depuis mamêmepagejsp pointer avec action="/context/maservlet/MaMêmeservletDeCalcul".
    Car on ne peut pas pointer toujour que sur la servlet. Je te propose de faire une boucle. En plus comme ca tu pourras respecter le pattern MVC.

    Pointer toujours sur la même servlet sans page jsp ne donnerras rien car tu ne pourras pas 'submit"er une seconde fois. Non on ne peut pas créer une page oû on change seulement le bas. Faire une jsp donneras l'illusion que oui si tu fais la même présentation.
    Allez bonne chance

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

Discussions similaires

  1. Remplir JSP avec servlet lancement application
    Par Nicos6414 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 03/12/2012, 11h24
  2. Créer un fichier JSP avec le plugin Google
    Par Tificombo dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 01/02/2012, 21h10
  3. Lecture de fichier mp3 avec servlets/JSP
    Par MarENSI dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/10/2010, 14h38
  4. Envoi fichier ou de données avec servlet sans formulaire
    Par jonbegood dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 08/10/2010, 08h51
  5. envoi du fichier XML avec servlet
    Par s.lakhlifi dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 05/10/2006, 11h59

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