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 d'écriture HTML dans une servlet


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Points : 61
    Points
    61
    Par défaut Problème d'écriture HTML dans une servlet
    Bonjour,

    J'ai une servlet qui doit renvoyer à la page du code html contenant des bean:message et des variables. Je me demandais quelle est la syntaxe pour écrire ce code. Je l'écris de cette façon mais il ne tient pas compte des beans et m'affiche les variables ${} telles quelles et non leur valeur:

    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
     
    tamp.append("<table>");
    tamp.append("<tr>");
    tamp.append("<td>");
    tamp.append("<bean:message key=\"extractionDonnees.impactFinancier.estime.de\" bundle=\"champs\"/>");
    tamp.append("<input type=\"text\" size=\"10\" maxlength=\"16\" name=\"impactFinancierReelMin\" id=\"impactFinancierReelMin\" value=\"${extractionDonneesForm.impactFinancierReelMin}\" />");
    tamp.append(res);
    tamp.append("</td>");
    tamp.append("<td>");
    tamp.append("<bean:message key=\"extractionDonnees.impactFinancier.estime.a\" bundle=\"champs\"/>");
    tamp.append("<input type=\"text\" size=\"10\" maxlength=\"16\" name=\"impactFinancierReelMax\" id=\"impactFinancierReelMax\" value=\"${extractionDonneesForm.impactFinancierReelMax}\" />");
    tamp.append(res);
    tamp.append("</td>");
    tamp.append("</tr>");
    tamp.append("<tr valign=top>");
    tamp.append("<td colspan=\"4\">&nbsp;</td>");
    tamp.append("</tr>");
    tamp.append("</table>");
    Merci d'avance

  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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    C'est normal, tu oublies que le code renvoyé au client est du html, pas du code jsp.
    Donc, pour ton problème, il faudra rechercher dans la servlet le contenu du message.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Points : 61
    Points
    61
    Par défaut
    ok j'ai compris. Mais comment doit je faire pour récupérer le contenu du message?

  4. #4
    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
    Comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ResourceBundle bundle = ResourceBundle.getBundle("ApplicationResources");
    System.out.println(bundle.getString("test"));
    Avec un fichier de propriétés nommé "ApplicationResources.properties"

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Points : 61
    Points
    61
    Par défaut
    ok merci beaucoup.

    Je suppose que c'est pour récupérer les valeur des bean:message mais comment on fait pour récupérer les valeurs des variable ${var}??

  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
    Ce n'est pas cette servlet qui contient l'objet Form ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Points : 61
    Points
    61
    Par défaut
    euh non je pense pas.

  8. #8
    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
    Pour récupérer l'objet Form, il faudra le recherche dans les différents contextes possibles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    ExtractionDonneesForm form = (ExtractionDonneesForm)request.getAttribute("ExtractionDonneesForm");
    if (form == null)
    {
       form = (ExtractionDonneesForm)request.getSession().getAttribute("ExtractionDonneesForm");
    }
    Un truc dans le genre...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Points : 61
    Points
    61
    Par défaut
    super!!! merci beaucoup

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Points : 61
    Points
    61
    Par défaut
    et en paramètre de la fonction getAttribute, il faut que je mette quoi? le nom du formulaire? parce que la balise form n'a pas d'attribut name...

  11. #11
    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
    Si c'est du struts, c'est le nom défini dans struts-config.xml
    (balise <form-bean> attribut "name")

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Points : 61
    Points
    61
    Par défaut
    il me met l'erreur suivante :

    2010-12-22 18:09:22 ERROR [[Extraction_DonneesServlet]] Servlet.service() for servlet Extraction_DonneesServlet threw exception
    java.lang.NullPointerException
    at ft.proto.v2.presentation.declaration.servlets.Extraction_DonneesServlet.doPost(Extraction_DonneesServlet.java:59)

  13. #13
    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
    Il faudrait plus d'informations sur le process.
    Quelle est la séquence, un peu de code, etc...

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Points : 61
    Points
    61
    Par défaut
    J'ai un formulaire et sur le click sur un radio button j''appelle ma servlet qui va chercher dans la base la devise qui correspond à la demande. Elle renvoie au formulaire du code html contenant des champs.

    Voici le code de ma 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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    package ft.proto.v2.presentation.declaration.servlets;
     
    import javax.servlet.*;
    import javax.servlet.http.*;
     
    import ft.proto.v2.persistance.bean.liste.ImpactFinancier;
    import ft.proto.v2.presentation.declaration.forms.ExtractionDonneesForm;
     
    import java.io.*;
    import java.sql.*;
    import java.util.ResourceBundle;
     
    public class Extraction_DonneesServlet extends HttpServlet
    {	
    	public void doGet( HttpServletRequest request, HttpServletResponse reponse ) throws ServletException, IOException
    	{
    		doPost(request, reponse);
    	}
     
    	public void doPost( HttpServletRequest request, HttpServletResponse reponse ) throws ServletException, IOException
    	{	
    		PrintWriter sortie;  
    		reponse.setContentType("text/html;charset=UTF-8");
    		sortie = reponse.getWriter();	
    		StringBuffer tamp = new StringBuffer();
     
    		try {
    		      Class.forName("com.mysql.jdbc.Driver");
    		  } catch (Exception e) {
    		      System.err.println("ERROR: failed to load HSQLDB JDBC driver.");
    		      e.printStackTrace();
    		      return;
    		  }
     
    		  Connection connexion;
    		try {
    			connexion = DriverManager.getConnection("jdbc:mysql://localhost/sequoris", "root", "");
    			Statement st = connexion.createStatement();
    			int id = Integer.parseInt(request.getParameter("id"));
     
    			ExtractionDonneesForm f = (ExtractionDonneesForm)request.getAttribute("extractionDonneesForm");
    			if(id == 1){
    				String res;
    				if(request.getParameter("idEntite")!= ""){
    					ResultSet resultat = st.executeQuery("SELECT * FROM t_entite_securite WHERE id="+ request.getParameter("idEntite"));
    					resultat.next();
    					ResultSet resultat2 = st.executeQuery("SELECT id_devise FROM t_intervalles_financier WHERE id="+resultat.getString("id_intervalle_financier"));
    					resultat2.next();
    					ResultSet resultat3 = st.executeQuery("SELECT symbole FROM t_devises WHERE id="+resultat2.getString("id_devise"));
    					resultat3.next();
    					res = resultat3.getString("symbole");
    				}
    				else
    					res = "€";
    				tamp.append("<table>");
    				tamp.append("<tr>");
    				tamp.append("<td>");
    				ResourceBundle bundle = ResourceBundle.getBundle("ChampsResources_fr");
    				tamp.append(bundle.getString("extractionDonnees.impactFinancier.estime.de"));
    				tamp.append("<input type=\"text\" size=\"10\" maxlength=\"16\" name=\"impactFinancierReelMin\" id=\"impactFinancierReelMin\" value="+f.getImpactFinancierReelMin()+"/>");
    				tamp.append(res);
    				tamp.append("</td>");
    				tamp.append("<td>");
    				tamp.append(bundle.getString("extractionDonnees.impactFinancier.estime.a"));
    				tamp.append("<input type=\"text\" size=\"10\" maxlength=\"16\" name=\"impactFinancierReelMax\" id=\"impactFinancierReelMax\" value="+f.getImpactFinancierReelMax()+"/>");
    				tamp.append(res);
    				tamp.append("</td>");
    				tamp.append("</tr>");
    				tamp.append("<tr valign=top>");
    				tamp.append("<td colspan=\"4\">&nbsp;</td>");
    				tamp.append("</tr>");
    				tamp.append("</table>");
    			}
    			else if(id == 2){
    				if(request.getParameter("idEntite")!= ""){
    					ResultSet resultat = st.executeQuery("SELECT * FROM t_entite_securite WHERE id="+ request.getParameter("idEntite"));
    					resultat.next();
    					ResultSet resultat2 = st.executeQuery("SELECT * FROM t_intervalles_financier WHERE id="+resultat.getString("id_intervalle_financier"));
    					resultat2.next();
     
    				ResourceBundle bundle2 = ResourceBundle.getBundle("EnumDescResources_fr");
    				tamp.append("<table>");
    				tamp.append("<tr>");
    				tamp.append("<td align=\"left\" width=\"100%\">");
    				tamp.append("<html:radio property=\"impactFinancierEstime\" value=/>");
    				tamp.append(bundle2.getString("impactfinancier.inf"));
    				tamp.append(resultat2.getString("niv1"));
    				tamp.append("<html:radio property=\"impactFinancierEstime\" value=/>");
    				tamp.append(bundle2.getString("impactfinancier.entre"));
    				tamp.append(resultat2.getString("niv2inf"));
    				tamp.append(bundle2.getString("impactfinancier.et"));
    				tamp.append(resultat2.getString("niv2sup"));
    				tamp.append("<html:radio property=\"impactFinancierEstime\" value=/>");
    				tamp.append(bundle2.getString("impactfinancier.entre"));
    				tamp.append(resultat2.getString("niv3inf"));
    				tamp.append(bundle2.getString("impactfinancier.et"));
    				tamp.append(resultat2.getString("niv3sup"));
    				tamp.append("<html:radio property=\"impactFinancierEstime\" value=/>");
    				tamp.append(bundle2.getString("impactfinancier.sup"));
    				tamp.append(resultat2.getString("niv4"));
    				tamp.append("</td>");
    				tamp.append("</tr>");
    				tamp.append("<tr valign=top>");
    				tamp.append("<td colspan=\"4\">&nbsp;</td>");
    				tamp.append("</tr>");
    				tamp.append("</table>");
    			}
    			}
    			st.close();
    			connexion.close();
    			sortie.println(tamp);
    			sortie.close();  
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    l'erreur renvoyée est sur la ligne qui contient le f.getImpactFinancierReelMin(). Je pense donc que la variable f qui contient le formulaire est nulle.

  15. #15
    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
    Ok, ça n'a rien à voir avec ce que j'imaginais...

    Dans ton cas, un traitement Ajax parait tout indiqué.
    Dans tous les cas, il faut créer ta chaîne de paramètres à passer à la servlet, ça n'a pas de sens de rechercher le formulaire puisqu'à ce moment, il n'est pas alimenté des valeurs de ta page (ou alors il faudrait passer par la servlet/contrôleur qui le gère)

    Avec Ajax, ça ressemblerait à ceci
    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
     
    <html>
    <head>
    <script>
    //-----------------------------------------------------------------------------------------------
    function getXMLHttpRequest()
    {
        // Firefox
        if ( window.XMLHttpRequest ) return new XMLHttpRequest(); 
     
        // Internet Explorer
        if ( window.ActiveXObject ) return new ActiveXObject("Microsoft.XMLHTTP"); 
     
        // Not supported
        return null;
    }
     
    //-----------------------------------------------------------------------------------------------
    function getAdditionalData()
    {
        var http = getXMLHttpRequest();
        if (http == null) return;
        
        http.open("POST", "url/servlet", true);
        http.onreadystatechange = function()
        {
            if (http.readyState == 4)
            {
                document.getElementById("output").innerHTML = http.responseText;
            }
        }
        var parametres = "v1=" + escape(document.forms[0].v1.value);
        parametres += "&v2=" + escape(document.forms[0].v2.value);
        http.send(parametres);
    }
    </script>
    </head>
     
    <body>
     
    <form>
    ...
    <table>
    <tr>
        <td>blabla</td>
        <td><input type="text" name="v1"/></td>
    </tr>
    <tr>
        <td>blabla</td>
        <td><input type="text" name="v2"/></td>
    </tr>
     
    <tr>
        <td><input type="button" name="Autres informations" onclick="getAdditionalData()"/></td>
        <td id="output"></td>
    </tr>
    </table>
    ...
     
    </form>
     
    </body>
    </html>
    Là, tu ne quittes pas la page avant de soumettre ton formulaire.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Points : 61
    Points
    61
    Par défaut
    En fait, si je prend l'exemple d'une balise input. Si elle est écrite directement dans la jsp, elle a la tête suivante :

    <input type=\"text\" size=\"10\" maxlength=\"16\" name=\"impactFinancierReelMin\" id=\"impactFinancierReelMin\" value="${extractionDonneesForm.impactFinancierReelMin}"/>

    La variable impactFinancierReelMin du formulaire ExtractionDonneeForm se remplit donc avec la valeur de ${extractionDonneesForm.impactFinancierReelMin} lors de l'envoi du formulaire.

    Et je voudrais qu'il en soit la meme chose en passant par la servlet.

    Je peux pas passer la valeur de cette variable à ma servlet parce qu'elle est encore vide lors de l'appel à la servlet.

Discussions similaires

  1. Problème sur un champ SELECT dans une servlet
    Par kcizth dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 13/03/2008, 16h47
  2. Réponses: 1
    Dernier message: 25/07/2007, 09h21
  3. problème d'injection (?) d'un session bean EJB3 dans une servlet
    Par toomsounet dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 11/03/2007, 01h26
  4. [HTML] Inclure une Servlet dans une page HTML
    Par boux2 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/11/2006, 14h11
  5. [Tomcat] droits d'écriture fichier dans une servlet
    Par Laurent.B dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 30/05/2006, 19h35

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