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

Struts 1 Java Discussion :

Problème encodage caractères spéciaux


Sujet :

Struts 1 Java

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Points : 167
    Points
    167
    Par défaut Problème encodage caractères spéciaux
    Bonjour,

    J'ai un soucis d'encodage. Dans mon action je renseigne un bean que j'affiche dans une jsp.
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    userInfo.setLastName("Uğurlu");

    Le problème c'est que dans ma jsp si j'affiche cette valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:text property="userInfo.lastName" readonly="true" styleClass="inputReadOnly" />
    J'obtiens la valeur suivante :
    U?urlu
    Mes classe java et jsp sont encodées en UTF-8.
    Si vous avez une piste, je suis preneur
    Merci.

  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
    Peux-tu montrer la page JSP ?

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Points : 167
    Points
    167
    Par défaut
    Ce qui est surprenant c'est que chez moi j'ai un ? a la place du caractere spécial, et sur ce forum le caractere apparait avec son code html...
    Le code :
    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
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>   
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    	<libs:panel titleKey="Identity.userIdentity" caption="true">
    	<jsp:attribute name="panelBody">
    <html:form method="post" action="Identity" styleId="identityForm">
    		<html:hidden property="method" value="${actionKey}"/>
    		<libs:panel titleKey="Identity.userCommonAttribute">
    			<jsp:attribute name="panelBody">
    				<table width="100%">
    					<tr>
    <table>
    	<tr>
    	    <td><label class="label"><fmt:message key="Identity.lastName"/></label></td>
    		<td><html:text property="userInfo.lastName" readonly="true" styleClass="inputReadOnly" /></td>
    	</tr>
    	<tr>
    		<td><label class="label"><fmt:message key="Identity.firstName"/></label></td>
    		<td><html:text property="userInfo.firstName" styleClass="input200" maxlength="80"/><label class="label">*</label></td>
    	</tr>
    </table>
    					</tr>
    					<tr>																			
    						<td align="center" width="100%"><html:submit><fmt:message key="${buttonKey}"/></html:submit></td>
    					</tr>
    				</table>
    			</jsp:attribute>
    		</libs:panel>
    	</html:form>
    	</jsp:attribute>
    </libs:panel>

  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
    Tu utilises Tiles ou un équivalent ?
    En tout cas, regarde si tu as une directive
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    Si non, mets la

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Points : 167
    Points
    167
    Par défaut
    oui j'utilise les tiles,
    dans le head de mon template.jsp j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta content="text/html; charset=utf-8" http-equiv="content-type" />

  6. #6
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Points : 167
    Points
    167
    Par défaut
    Ok, ta solution affiche bien les bons caractères.
    Merci

    Par contre maintenant si je poste ce même caractère placé dans mon form, dans mon action je récupère UÄŸ à la place de ce caractère spécial.

    Donc dans la validation du formulaire le caractère spécial semble mal interprété.

    Si tu as une idée également pour ça...

  7. #7
    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
    Gérer les caractère accentués correctement nécessite que toute ta chainesoit concue correctement, depuis la DB à l'arrière jusqu'au client. Dans ton cas, je suppose que ton client envoie en utf-8 mais que ton conteneur J2EE a gardé sa configuration par défaut qui est de décoder en iso-8859-1 (cf spec J2EE).

  8. #8
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Points : 167
    Points
    167
    Par défaut
    oui effectivement je dois trouver un moyen de modifier l'encoding de Tomcat.

  9. #9
    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

  10. #10
    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 y a un moyen simple pour gérer correctement ton encodage, il suffit de placer un filtre devant les contrôleurs et de faire 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
     
    public class FilterUTF8 implements Filter
    {
        private static final Logger logger = Logger.getLogger(FilterUTF8.class);
     
        public void init(FilterConfig filterConfig) throws ServletException {}
     
        public void destroy() {}
     
        /**
         * Filtrage de la requête http
         */
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
        {
            try
            {
                request.setCharacterEncoding("UTF-8");
     
                chain.doFilter(request, response);
            }
            catch (Throwable t)
            {
                logger.error("doFilter error : " + t.toString());
            }
        }
    }
    Avec struts, tu as également la possibilité de définir ton propre pré-processeur de requête, j'utilise 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
     
    public class StrutsProcessor extends LayoutRequestProcessor
    {
        private static final long serialVersionUID = 1;
     
        @Override
        public void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
        {
            try
            {
                request.setCharacterEncoding("UTF-8");
                response.setCharacterEncoding("UTF-8");
                HibernateUtils.currentSession();
                super.process(request, response);
            }
            catch (Exception e)
            {
                /*
                 * Erreur de convertion de données
                 */
                if (e.getCause() instanceof ConversionException)
                {
                    ((HttpServletRequest) request).getSession().setAttribute("ERROR_MESSAGES", ((ServletException) e).getRootCause().getMessage());
                    ((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getRequestURI() + "?methodName=redisplay");
                }
            }
            finally
            {
                HibernateUtils.closeSession();
            }
        }
    }

Discussions similaires

  1. Problème encodage caractéres spéciaux MYSQL avec juste &
    Par EDrequest dans le forum Requêtes
    Réponses: 5
    Dernier message: 15/05/2010, 10h06
  2. Probléme encodage caractéres spéciaux MYSQL
    Par FoxLeRenard dans le forum Installation
    Réponses: 1
    Dernier message: 20/02/2006, 12h10
  3. Réponses: 1
    Dernier message: 02/02/2006, 23h12
  4. [SOAP] problème de caractères spéciaux
    Par ep31 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 02/12/2005, 17h43
  5. [SQL Server] problème de caractères spéciaux
    Par mbibim63 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 02/06/2005, 18h38

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