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

Java EE Discussion :

Mes <c:import> ne fonctionnent pas après une réponse du serveur


Sujet :

Java EE

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut Mes <c:import> ne fonctionnent pas après une réponse du serveur
    Bonjour à tous,

    Je suis en train de développer un projet en Java EE, dans lequel j'ai des pages qui importent un menu de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:import url="/menu" />
    La servlet Menu va se charger d'afficher la page qui se trouve dans WEB-INF/menu.jsp.

    Le seul problème, c'est que le menu ne s'affiche que lors de l'affichage initial de la page qui l'importe, mais pas quand le serveur renvoie sur la page après un traitement.

    Est-ce normal?
    Ma question est très générale, ce pourquoi je ne donne pas beaucoup de code, mais si vous en voulez (parce que de prime abord, la réponse est "Non"), n'hésitez pas.

    Merci d'avance.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Tu as bien l'import de la taglib en entete de ta jsp ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Ca?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    Il est dans un fichier taglib.jsp importé en prelude grâce au web.xml.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      <jsp-config>
        <jsp-property-group>
          <url-pattern>*.jsp</url-pattern>
          <include-prelude>/inc/taglib.jsp</include-prelude>
        </jsp-property-group>
      </jsp-config>

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Allo!

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Montre nous du code, comment ta page est appelée dans les deux cas etc...

  6. #6
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par User Name Voir le message
    Bonjour à tous,

    Je suis en train de développer un projet en Java EE, dans lequel j'ai des pages qui importent un menu de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:import url="/menu" />
    La servlet Menu va se charger d'afficher la page qui se trouve dans WEB-INF/menu.jsp.
    Tu veux dire que, depuis ta JSP, tu tente d'importer ce que retourne ta servlet Menu? D'habitude on fait l'inverse, on utilise le JSP dans le servlet, pas l'inverse

    Le seul problème, c'est que le menu ne s'affiche que lors de l'affichage initial de la page qui l'importe, mais pas quand le serveur renvoie sur la page après un traitement.
    Montre nous le traitement et la manière dont tu renvoie vers la page.
    Est-ce normal?
    Surement

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Exemple:

    creationClient.java
    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
    package com.tp1.servlets;
     
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
     
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
     
    import com.tp1.beans.Client;
    import com.tp1.business.ValidationClient;
     
    @SuppressWarnings("serial")
    public class creationClient extends HttpServlet 
    {
    	public static final String CHAMP_NOM = "nom";
    	public static final String CHAMP_PRENOM = "prenom";
    	public static final String CHAMP_ADRESSE = "adresse";
    	public static final String CHAMP_TELEPHONE = "telephone";
    	public static final String CHAMP_EMAIL = "email";
     
    	public static final String ATT_CLIENT = "client";
    	public static final String ATT_ERREURS = "erreurs";
     
    	public static final String ATT_CLIENTS_SESSION = "clients";
     
    	public static final String VUE_FINALE = "/WEB-INF/afficheClient.jsp";
    	public static final String VUE_INITIALE = "/WEB-INF/creerClient.jsp";
     
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    	{	
    		this.getServletContext().getRequestDispatcher(VUE_INITIALE).forward(request, response);
    	}
     
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    	{	
    		/* Récupération de la session */
    		HttpSession session = request.getSession();
     
    		Map<String, String> erreurs = new HashMap<String, String>();
     
    		/* Référence sur la HashMap client en session */
    		Map<String, Client> mapClient = (HashMap<String, Client>) session.getAttribute(ATT_CLIENTS_SESSION);
     
    		/* S'il n'y a pas déjà de Map clients en session, en créer une */
    		if (mapClient==null)
    		{
    			mapClient = new HashMap<String, Client>();
    		}
     
    		/* Validation du client */
    		ValidationClient validationClient = new ValidationClient(request);
    		Client client = validationClient.validerClient();
     
    		/* Si le nom du existe déjà en session */
    		if (mapClient.containsKey(client.getNom()))
    		{
    			erreurs.put(CHAMP_NOM, "Un client avec ce nom existe déjà.");
    		}
     
    		erreurs = validationClient.getErreurs();
     
    		request.setAttribute(ATT_CLIENT, client);
    		request.setAttribute(ATT_ERREURS, erreurs);
     
    		if (erreurs.isEmpty())
    		{	
    			mapClient.put(client.getNom(), client);
    			session.setAttribute(ATT_CLIENTS_SESSION, mapClient);
    			this.getServletContext().getRequestDispatcher(VUE_FINALE).forward(request, response);
    		}
    		else
    		{
    			this.getServletContext().getRequestDispatcher(VUE_INITIALE).forward(request, response);
    		}
    	}
     
    }
    ValidationClient.java
    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
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    package com.tp1.business;
     
    import java.util.HashMap;
    import java.util.Map;
     
    import javax.servlet.http.HttpServletRequest;
     
    import com.tp1.beans.Client;
     
    public class ValidationClient 
    {
    	public static final String ATT_NOM = "nom";
    	public static final String ATT_PRENOM = "prenom";
    	public static final String ATT_ADRESSE = "adresse";
    	public static final String ATT_TELEPHONE = "telephone";
    	public static final String ATT_EMAIL = "email";
     
    	public static final String ATT_NOUVEAU_CLIENT = "nouveau_client";
    	public static final String ATT_CLIENT_CHOISI = "listeClients";
    	public static final String ATT_CLIENTS_SESSION = "clients";
     
    	private String nom;
    	private String prenom;
    	private String adresse;
    	private String telephone;
    	private String email;
     
    	private String nouveau_client;
    	private String client_choisi;
     
    	private Map<String, String> erreurs;
     
    	/* Constructeur */
    	public ValidationClient(HttpServletRequest request)
    	{
    		/* Initialiser les champs pour savoir si le client est nouveau ou pas */
    		this.nouveau_client = request.getParameter(ATT_NOUVEAU_CLIENT);
    		this.client_choisi = request.getParameter(ATT_CLIENT_CHOISI);
     
    		if (this.nouveau_client==null || this.nouveau_client.equals("Oui"))
    		{
    			/* Si le client est nouveau, valider les champs et le créer */
    			this.nom = request.getParameter(ATT_NOM);
    			this.prenom = request.getParameter(ATT_PRENOM);
    			this.adresse = request.getParameter(ATT_ADRESSE);
    			this.telephone = request.getParameter(ATT_TELEPHONE);
    			this.email = request.getParameter(ATT_EMAIL);
    		}
    		else
    		{
    			/* Si le client a été choisi parmi ceux en session, récupérer le client depuis la session */
    			String nomClientChoisi = request.getParameter(ATT_CLIENT_CHOISI);
    			Client clientEnSession = ((HashMap<String, Client>)(request.getSession().getAttribute(ATT_CLIENTS_SESSION))).get(nomClientChoisi);
     
    			this.nom = clientEnSession.getNom();
    			this.prenom = clientEnSession.getPrenom();
    			this.adresse = clientEnSession.getAdresse();
    			this.telephone = clientEnSession.getTelephone().toString();
    			this.email = clientEnSession.getMail();
    		}
     
    		/* Initialiser la HashMap d'erreurs */
    		this.erreurs = new HashMap<String, String>();
    	}
     
    	/* Méthode qui retourne un Client */
    	public Client validerClient()
    	{
    		Client client = new Client();
     
    		if (this.nouveau_client==null || this.nouveau_client.equals("Oui"))
    		{
    			validerEmail();
    			validerNomEtPrenom();
    			validerAdresse();
    			validerTelephone();
    		}
     
    		client.setMail(this.email);
    		client.setNom(this.nom);
    		client.setPrenom(this.prenom);
    		client.setTelephone(validerTelephone());
    		client.setAdresse(this.adresse);
     
    		return client;
    	}
     
    	/* Méthodes de validation */
    	public void validerEmail()
    	{
    		if ((this.email!=null && this.email!="") && !this.email.matches( "([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)"))
    		{
    			erreurs.put("email", "Veuillez saisir une adresse mail valide.");
    		}
    	}
     
    	public void validerNomEtPrenom()
    	{
    		String nomLocal = this.nom;
    		String prenomLocal = this.prenom;
     
    		if (nomLocal==null || nomLocal.trim().length()<2)
    		{
    			this.erreurs.put("nom","Le nom doit comporter au moins 2 caractères.");
    		}
     
    		if ((prenomLocal!=null && prenomLocal!="") && prenomLocal.trim().length()<2)
    		{
    			this.erreurs.put("prenom", "Le prénom doit comporter au moins 2 caractères.");
    		}
    	}
     
    	public void validerAdresse()
    	{
    		if (this.adresse==null || this.adresse.trim().length()<10)
    		{
    			this.erreurs.put("adresse", "L'adresse doit comporter au moins 10 caractères.");
    		}
    	}
     
    	public Long validerTelephone()
    	{
    		try
    		{
    			Long tel = Long.parseLong(this.telephone);
    			if (this.telephone.trim().length()<4)
    			{
    				erreurs.put("telephone", "Le numéro de téléphone doit faire au moins 4 chiffres.");
    			}
    			return tel;
    		}
    		catch (NumberFormatException n)
    		{
    			erreurs.put("telephone", "Le champ téléphone doit contenir uniquement des chiffres.");
    			return null;
    		}
    		catch (NullPointerException n2)
    		{
    			erreurs.put("telephone", "Le champ téléphone doit être rempli.");
    			return null;
    		}
    	}
     
    	/* Getters */
    	public Map<String, String> getErreurs()
    	{
    		return this.erreurs;
    	}
    }
    creerClient.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
    <%@ page pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>Création d'un client</title>
    <link type="text/css" rel="stylesheet" href="inc/style.css" />
    </head>
    <body>
    	<c:import url="/menu" />
    	<div>
    		<form method="post" action="creationClient">
    			<fieldset>
    				<legend>Informations client</legend>
    				<label for="nom">Nom <span class="requis">*</span></label> <input
    					type="text" id="nom" name="nom" value="${ client.nom }" size="30" maxlength="30" />
    				<c:if test="${ !empty erreurs.nom }">
    					<span class="erreur"><c:out value="${ erreurs.nom }" /></span>
    				</c:if>
    				<br /> <label for="prenom">Prénom </label> <input type="text"
    					id="prenom" name="prenom" value="${ client.prenom }" size="30" maxlength="30" />
    				<c:if test="${ !empty erreurs.prenom }">
    					<span class="erreur"><c:out value="${ erreurs.prenom }" /></span>
    				</c:if>
    				<br /> <label for="adresse">Adresse de livraison <span
    					class="requis">*</span></label> <input type="text" id="adresse"
    					name="adresse" value="${ client.adresse }" size="30" maxlength="60" />
    				<c:if test="${ !empty erreurs.adresse }">
    					<span class="erreur"><c:out value="${ erreurs.adresse }" /></span>
    				</c:if>
    				<br /> <label for="telephone">Numéro de téléphone <span
    					class="requis">*</span></label> <input type="text" id="telephone"
    					name="telephone" value="${ client.telephone }" size="30" maxlength="30" />
    				<c:if test="${ !empty erreurs.telephone }">
    					<span class="erreur"><c:out value="${ erreurs.telephone }" /></span>
    				</c:if>
    				<br /> <label for="email">Adresse email</label> <input type="email"
    					id="email" name="email" value="${ client.mail }" size="30" maxlength="60" />
    				<c:if test="${ !empty erreurs.email }">
    					<span class="erreur"><c:out value="${ erreurs.email }" /></span>
    				</c:if>
    				<br />
    			</fieldset>
    			<input type="submit" value="Valider" /> <input type="reset"
    				value="Remettre à zéro" /> <br />
    		</form>
    		<c:if test="${ !empty message }">
    			<span class="erreur"><c:out value="${ message }" /></span>
    		</c:if>
    	</div>
    </body>
    </html>
    monMenu.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
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    	<link type="text/css" rel="stylesheet" href="inc/style.css" />
    </head>
    <body>
    	<div id="menu">
    	    <p><a href="<c:url value="/creationClient"/>">Créer un nouveau client</a></p>
    	    <p><a href="<c:url value="/creationCommande"/>">Créer une nouvelle commande</a></p>
    	    <p><a href="<c:url value="/listerClients"/>">Liste des clients</a></p>
    	    <p><a href="<c:url value="/listerCommandes"/>">Liste des commandes</a></p>
    	</div>
    </body>
    </html>
    Menu.java
    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
    package com.tp1.servlets;
     
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    /**
     * Servlet implementation class Menu
     */
    public class Menu extends HttpServlet {
    	private static final long serialVersionUID = 1L;
     
    	private static final String VUE = "/WEB-INF/monMenu.jsp";
     
        /**
         * @see HttpServlet#HttpServlet()
         */
        public Menu() {
            super();
            // TODO Auto-generated constructor stub
        }
     
    	/**
             * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
             */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		this.getServletContext().getRequestDispatcher(VUE).forward(request, response);
    	}
     
    	/**
             * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
             */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    	}
     
    }
    Quand un champ de la validation client est à modifier, l'application me renvoie bien sur la page creerClient.jsp, mais le menu disparaît!

  8. #8
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Quand tu est en POST, ton <c:import ulr="/Menu"/> importe ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    	}
    C'est à dire rien. Il y a un déséquilibre entre le doGet et le doPost pour ta servlet Menu.

    Aussi, pourquoi importer une servlet Menu, au lieu de faire directement un import de la JSP?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Quand tu est en POST, ton <c:import ulr="/Menu"/> importe ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    	}
    C'est à dire rien. Il y a un déséquilibre entre le doGet et le doPost pour ta servlet Menu.

    Aussi, pourquoi importer une servlet Menu, au lieu de faire directement un import de la JSP?
    Ca veut dire quoi "un déséquilibre entre le doGet et le doPost pour ma servlet Menu"? J'ai pas besoin du doPost, je peux l'enlever certes, c'est Eclipse qui l'a générée automatiquement.
    Sinon pour répondre à ta deuxième question, c'est parce que j'ai suivi un tutoriel Java , et il dit que les JSP doivent être protégées du public en les mettant dans le dossier WEB-INF.

    Edit: Ah mince, j'avais pas lu ta phrase au dessus de ton quote de code.

    Je comprends mieux, maintenant, il suffisait d'appeler ma doGet() dans ma doPost dans la Menu.jsp.

    Merci tchiiize, aussi brillant que d'habitude!

    Sinon, j'en profite pour poser une autre question: quand je saisis un caractère accentué dans mes champs de texte pour créer un client, les "é" sont remplacés par des "ƒÂƒ".
    Pire: A chaque requête suite à un champ erroné, un nouveau "ƒÂƒ" s'ajoute!

    Voici le contenu de mon web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      <filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
          <param-name>ignore</param-name>
          <param-value>false</param-value>
        </init-param>
      </filter>
    C'est censé résoudre le problème, pas le créer (sur mes machines, c'est en ISO que ça marche bien, mais depuis que on m'a fait mettre ce filtre + config Eclipse en UTF-8 + UTF-8 dans mes balises JSP, ça a foutu le bordel dans mes caractères dans mes navigateurs).

  10. #10
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Il y a 3 paramètres à prendre en comptes au niveau de l'encodage:

    Quel encodage pour la source de la page JSP (page encoding). Ca permettra à tomcat de savoir comment convertir les byte formant le fichieir JSP en une classe en mémoire. C'est déterminé principalement par le paramètre "encoding" de la directive @page en haut du JSP. Ca doit bien évidement correspondre à l'encodage utilisé par l'IDE pour sauver le fichier quand tu l'édite.

    Quel est l'encodage de la requête qui viens du browser? Ca permettra de déterminer comment convertir les bytes reçu du browser en des String java. Là c'est plus tordu et c'est souvent là que ça coince. Normalement c'est dirigé par le paramètre content-encoding reçu du navigateur. Mais, dans le cas d'une requête de type GET, ce n'est souvent pas soumis par le navigateur. Donc souvent on ajoute un filtre dans le conteneur J2EE pour forcer un encodage. Par le passé on forçait ISO-8859-1. Aujourd'hui on force UTF-8. Il y a aussi des contraintes techniques qui font que parfois on commence à décoder avant de connaitre le paramètre content-encoding passé par le navigateur, ce qui fait qu'on utilise l'encoding par défaut. En général, la solution est double. A) mettre dans la configuration du tomcat (pas le web.xml), au niveau du <connector ...> un attribut URIEncoding="UTF-8", et mettre dans tous les formulaires faisant du POST, au niveau du <form> un attribut accept-charset="UTF-8"

    Quel est l'encodage de la réponse. Ceci permet de dire au browser comment interpréter les byte reçus du serveur. C'est dirigé, dans le cas du JSP, par la partie charset du paramètre contentType de la directive @Page dans ta jsp.

    Plus de détail et la manière dont les différents fallback s'enchainent ici: http://docs.oracle.com/javaee/5/tutorial/doc/bnayb.html

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 348
    Points : 103
    Points
    103
    Par défaut
    Merci pour la théorie. Ca ne m'a pas aidé à trouver le problème chez moi, mais je regarderai ultérieurement d'où ça vient, ce n'est pas le plus urgent.
    Mon navigateur est configuré en UTF-8 aussi!

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

Discussions similaires

  1. Mes retours a la ligne ne fonctionnent pas.
    Par Janosor dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 31/08/2008, 10h15
  2. Réponses: 34
    Dernier message: 24/05/2006, 01h08
  3. Réponses: 7
    Dernier message: 24/01/2006, 11h03
  4. La fonction CurrentDb() ne fonctionne pas dans une requête
    Par Sébastien Le Goyet dans le forum Access
    Réponses: 8
    Dernier message: 24/11/2005, 17h46
  5. Réponses: 1
    Dernier message: 27/10/2005, 21h48

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