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

JSF Java Discussion :

Encoding UTF-8 et JSF / Facelets


Sujet :

JSF Java

  1. #1
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut Encoding UTF-8 et JSF / Facelets
    Hello,

    J'ai besoin d'utiliser l'encodage UTF-8 dans mon application.

    Dans mon code, j'ai par exemple ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <h:form>
        <h:inputText value="#{bean.xxx}"/>
        <h:outputText value="#{bean.xxx}"/>
        <h:commandButton value="Test" action="#{bean.doIt}"/>
        <a4j:commandButton value="Test2" action="#{bean.doIt}"/>
    </h:form>
    Si je tape "Yéyé" dans mon inputText, et que je clique sur le a4j:commandButton, alors l'outputText réaffichera "Yéyé".
    Si je clique sur le h:commandButton, alors l'outputText affichera un truc du genre "Yéyé" !

    Visiblement, l'encodage de base de JSF / Facelets n'est pas UTF-8 !
    Comment je lui définis son encodage de base ? A priori, je dirais dans le web.xml, mais quel context-param faut-il définir ?

    Merchi !

    ps: J'utilise JSF 1.2, Tomcat 5.5, RichFaces 3.1.4, Facelets 1.1.11...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  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
    Billets dans le blog
    1
    Par défaut
    Tu devrais essayer par un filtre, personnellement, c'est ce que je fais (avec struts), ça devrait fonctionner avec jsf (à voir)
    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
     
    public class FiltreUTF8 implements Filter
    {
        public void init(FilterConfig filterConfig) throws ServletException {}
     
        public void destroy() {}
     
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
        {
            request.setCharacterEncoding("UTF-8");
            chain.doFilter(request, response);
        }
    }
     
     
    + web.xml
     
    <web-app>
     
     <filter>
      <filter-name>FiltreUTF8</filter-name>
      <filter-class>package.FiltreUTF8</filter-class>
     </filter>
     
     <filter-mapping>
      <filter-name>FiltreUTF8</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>
    ...
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    OButterlin, ô joie !

    Ta solution fonctionne 'achement bien ! Joie joie.

    Effectivement, le filter définit comme tu l'as fait me corrige mon problème d'accent même avec le commandButton de "base" !

    Maintenant, je ne comprends pas que cela ne soit pas paramétrable dans le web.xml !
    Je pensais avoir une piste grâce à cette page, mais impossible de faire marcher ce CHARACTER_ENCODING_KEY (ou alors il est utilisé pour autre chose) !

    J'ai essayé dans le web.xml ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        <context-param>
            <param-name>javax.faces.CHARACTER_ENCODING_KEY</param-name>
            <param-value>utf-8</param-value>
        </context-param>
    ou encore ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        <context-param>
            <param-name>javax.faces.CHARACTER_ENCODING_KEY</param-name>
            <param-value>javax.faces.request.charset</param-value>
        </context-param>
    et de définir ce paramètre dans un fichier propriété, mais rien !

    Edit: J'ai aussi essayé de lancer mon Tomcat en mettant -Djavax.faces.request.charset=utf-8, mais ça ne change rien non plus !

    Donc si quelqu'un a une idée pour faire marcher cela sans filter, je serais bien heureux de connaître la solution !
    Merci encore OButterlin !
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  4. #4
    Membre chevronné Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Par défaut
    c'est pas tout simplement dans tes pages JSF?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ page language="java" contentType="text/html;charset=UTF-8"%>

  5. #5
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Je n'utilise pas de JSP (pouah) mais des XHTML...
    Donc à moi d'avoir l'équivalent...

    J'avais tout de même essayé en mettant dans un tag HTML META, mais ça ne changeait rien...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  6. #6
    Membre chevronné Avatar de heid
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2002
    Messages : 388
    Par défaut
    Citation Envoyé par romaintaz Voir le message
    Je n'utilise pas de JSP (pouah) mais des XHTML...
    Arf, chanceux.

  7. #7
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Citation Envoyé par heid Voir le message
    Arf, chanceux.
    Oui, je sais
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  8. #8
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    J'avais un problème similaire mais aucune de ces solutions ne fonctionnait.
    Après recherche, il s'avère que la directive <%@ page language="java" contentType="text/html;charset=UTF-8"%> n'est pas prise en compte quand elle est externalisée dans un autre fichier, lui-même inclus dans la page.

    Avant :

    page.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@include file="_include.jsp"%>
    _include.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %>
    <%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
    <%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
    Apres :
    page.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <%@include file="_include.jsp"%>
    _include.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %>
    <%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
    <%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
    Je le signale pour ceux qui auraient des problèmes similaires.

  9. #9
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut
    tout le monde

    J'ai cherché aussi une solution à ce problème.

    J'utilise JSF 1.1 avec java 1.4 sous Weblogic 8.1 SP6.

    J'ai implémenter la solution du filter pour l'encoding, mais chez moi, cela ne fonctionnait pas

    Alors, en grattant un peu les specs de JSF, elles décrivent le cycle de vie, et la solution est de fixer l'encoding UTF-8 avant que le serveur ramène les valeurs de la page vers le controlleur JSF (le managedBean)

    Alors, j'ai implémenter ce qui suit :
    j'ai déclarer un listener dans mon fichier faces-config.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <lifecycle>
            <phase-listener>monPackage.JsfEncodingUTF8Listener</phase-listener>
        </lifecycle>
    Et dans ma classe qui s'occupe du listener, j'ai fait 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
     
    monPackage.jsf;
     
    import javax.faces.event.*;
    import java.io.UnsupportedEncodingException;
    import javax.servlet.ServletRequest;
     
     
    public class JsfEncodingUTF8Listener implements PhaseListener {
     
        public void beforePhase(PhaseEvent e) {
            if (e.getPhaseId() == PhaseId.APPLY_REQUEST_VALUES) {
                ServletRequest request = (ServletRequest) e.getFacesContext().getExternalContext().getRequest();
                try {
                    request.setCharacterEncoding("UTF-8");
                } catch (UnsupportedEncodingException uee) {
                    System.out.println(uee);
                }
            }
        }
     
        public void afterPhase(PhaseEvent e) {
        }
     
        public PhaseId getPhaseId() {
            return javax.faces.event.PhaseId.ANY_PHASE;
        }
    }
    Donc, le but est de me placer sur la phase du cycle de vie qui va ramener les information du formulaire vers le contrôleur, et je me place juste avant. donc dans la fonction
    beforePhase
    et sur la phase
    PhaseId.APPLY_REQUEST_VALUES
    Ensuite, je n'ai plus qu'à recuperer le context et à fixer l'encodage des caractères
    Pour plus d'info, voir la faq

  10. #10
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 109
    Par défaut
    bonjour a tous ,
    j'ai exactement le meme problème que romaintaz mais je n'arrive pas le résoudre.pourtant j'ai bien testé la sollution du filter mais ca ne marche pas

    est ce que j'aurrai oublié une truc?

  11. #11
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut
    Citation Envoyé par tongo Voir le message
    bonjour a tous ,
    j'ai exactement le meme problème que romaintaz mais je n'arrive pas le résoudre.pourtant j'ai bien testé la sollution du filter mais ca ne marche pas

    est ce que j'aurrai oublié une truc?


    Est-ce que tu as essayé de mettre en place ton propre listener au niveau JSF pour faire en fait ce que fait le filter ?

  12. #12
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 109
    Par défaut
    finalement j'ai pu resoudre mon probléme en changent l'necodage de mes page jsp et ca marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <jsp:directive.page language="java" contentType="text/html;charset=iso-8859-1"
                        pageEncoding="iso-8859-1" />

  13. #13
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 154
    Par défaut
    Pour ma part, je met tous mes libellés dans un properties et je n'ai jamais aucun problème d'affichage (en plus c'est pratique si tu veux mettre plusieurs langues à ton appli plus tard).

    Un petit <a4j:loadBundle> dans ton template est la clé .

  14. #14
    Membre averti
    Inscrit en
    Février 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 28
    Par défaut
    Votre solution fonctionne à merveille un grand merci !!!

    Citation Envoyé par OButterlin Voir le message
    Tu devrais essayer par un filtre, personnellement, c'est ce que je fais (avec struts), ça devrait fonctionner avec jsf (à voir)
    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
     
    public class FiltreUTF8 implements Filter
    {
        public void init(FilterConfig filterConfig) throws ServletException {}
     
        public void destroy() {}
     
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
        {
            request.setCharacterEncoding("UTF-8");
            chain.doFilter(request, response);
        }
    }
     
     
    + web.xml
     
    <web-app>
     
     <filter>
      <filter-name>FiltreUTF8</filter-name>
      <filter-class>package.FiltreUTF8</filter-class>
     </filter>
     
     <filter-mapping>
      <filter-name>FiltreUTF8</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>
    ...
    A+

  15. #15
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Si on utilise GlassFish, moi j'utilise ça :

    http://www.developpez.net/forums/d12...a/#post6643856

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

Discussions similaires

  1. instruction pour xml Encoder utf-8
    Par totoche dans le forum ASP
    Réponses: 7
    Dernier message: 14/02/2007, 11h03
  2. [PHP] <?xml version="1.0" encoding="UTF-16
    Par pierrot10 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 06/03/2006, 11h22
  3. [SAX] SAXParser et encoding="UTF-8"
    Par mardona dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 08/02/2006, 00h07
  4. problème d'encoding UTF-8 via la SDK MSXML
    Par ep31 dans le forum MFC
    Réponses: 6
    Dernier message: 26/01/2006, 09h46
  5. [1.1] Supprimer xml vers=1.0 encod=utf-8
    Par Nip dans le forum ASP.NET
    Réponses: 9
    Dernier message: 24/11/2005, 16h09

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