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 :

[PrimeFaces-Push] Problème d'encodage


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Par défaut [PrimeFaces-Push] Problème d'encodage
    Bonjour,

    J'ai implémenté dans mon application la fonctionnalité de PrimeFaces Push - FaceMessages (démo) afin d'afficher des notifications aux utilisateurs connectés.

    Le tout fonctionne correctement à l'exception de l'encodage des caractères affiché dans le composant <p:growl/>.
    Tous les caractères accentués sont remplacé par un "?"

    Mes projet sont bien configurés en UTF-8 dans netbeans ainsi que dans les pages JSF d’où mon incompréhension vis-à-vis de ce problème.

    Auriez-vous une solution à ce problème ?

    Je vous remercie d'avance pour l'aide apportée

    J'utilise glassfish 3.1.2.2, Primefaces 3.5, Netbeans, Maven.

    web.xml
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
     
        <session-config>
            <session-timeout>30</session-timeout>
        </session-config>
     
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
     
        <servlet>
            <servlet-name>Push Servlet</servlet-name>
            <servlet-class>org.primefaces.push.PushServlet</servlet-class>
            <async-supported>true</async-supported>        
        </servlet>
     
        <servlet-mapping>
            <servlet-name>Push Servlet</servlet-name>
            <url-pattern>/primepush/*</url-pattern>
        </servlet-mapping>
    </web-app>
    glassfish-web.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
    <glassfish-web-app error-url="">
      <parameter-encoding default-charset="UTF-8"/>
      <class-loader delegate="true"/>
      <jsp-config>
        <property name="keepgenerated" value="true">
          <description>Keep a copy of the generated servlet class' java code.</description>
        </property>
      </jsp-config>
    </glassfish-web-app>
    JSF
    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
     
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:p="http://primefaces.org/ui"
          xmlns:f="http://java.sun.com/jsf/core">
     
        <h:head>
            ...
        </h:head>
        <script type="text/javascript">
            function handleMessage(facesmessage) {
                facesmessage.severity = 'info';
                growl.show([facesmessage]);
            }
        </script>
     
        <f:view locale="#{language.locale}">
            <h:body>
                <div id="global">
                    <p:growl widgetVar="growl" showDetail="true"/>
                    <p:socket onMessage="handleMessage" channel="/notification" />
                    // ... 
                </div>
            </h:body>
        </f:view>
    Notification.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public final class Notification {
     
        private Notification() {
        }
     
        public static void send(String summary, String detail) {
            PushContext pushContext = PushContextFactory.getDefault().getPushContext();
            pushContext.push("/notification", new FacesMessage(summary, detail));
        }
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Par défaut
    Bonjour,

    J'ai fini par trouver ce qui n'allait pas.
    Il semblerait que Facelet utilise de base l'UTF-8 pour l'encodage, cependant dans certaines requêtes asynchrone (ajax, websocket, etc.), l'encodage peut différer. Les raisons précises m'échappent et si quelqu'un peut m'éclairer à ce sujet, je suis preneur.

    Il faut donc forcer l'utilisation de l'UTF-8 via un filtre.
    Voici celui que j'ai utilisé dans mon projet Web:
    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
    @WebFilter(filterName = "characterEncodingFilter", urlPatterns = {"/*"}, asyncSupported = true)
    public class CharacterEncodingFilter implements Filter {
     
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("UTF-8");
            chain.doFilter(request, response);
        }
     
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
        }
     
        @Override
        public void destroy() {
        }
    }
    Dans ce cas, j'utilise l'annotation @WebFilter pour le définir mais il peut très bien être déclaré dans le web.xml.

    A noter que ce genre de classe existe dans certaines API utilitaire (ex: Omnifaces).

    Cordialement,

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

Discussions similaires

  1. [CSV] Problème d'encodage
    Par simoryl dans le forum Langage
    Réponses: 13
    Dernier message: 18/04/2012, 15h20
  2. Problème d'encodage avec Python
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 22/02/2006, 14h36
  3. Problème d'encodage en Unicode
    Par Skreo dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 28/12/2005, 10h43
  4. Problème d'encodage sur MySql 4.1
    Par Blanchet dans le forum Outils
    Réponses: 1
    Dernier message: 04/12/2005, 04h53
  5. [XML::PARSER] Problème d'encodage
    Par frangin2003 dans le forum Modules
    Réponses: 13
    Dernier message: 05/09/2005, 14h59

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