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 :

Léger problème d'encodage


Sujet :

JSF Java

  1. #1
    Membre chevronné
    Avatar de tails
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 799
    Points : 2 148
    Points
    2 148
    Billets dans le blog
    15
    Par défaut Léger problème d'encodage
    Bonjour,

    Je suis en train de m'initier au javaee 7. J'ai donc développé une mini-application pour me mettre dans le bain, mais je rencontre un léger soucis d'encodage au niveau de l'enregistrement/la lecture du ManagedBean. En effet, il ne semble pas gérer correctement les caractères spéciaux tels que les accents.

    J'ai pourtant appliqué la solution décrite dans un des posts du forum (http://www.developpez.net/forums/d51...s/#post3103500), qui consiste à appliquer un filtre, mais apparement j'ai dû oublier un détail.

    Voici 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
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
        <filter>
            <filter-name>UTF8_Filter</filter-name>
            <filter-class>com.loloof64.my_friends.core.UTF8_Filter</filter-class>
        </filter>
     
       <filter-mapping>
            <filter-name>UTF8_Filter</filter-name>
            <url-pattern>/*</url-pattern>
       </filter-mapping>
        
        <context-param>
            <param-name>javax.faces.PROJECT_STAGE</param-name>
            <param-value>Development</param-value>
        </context-param>
        
        <servlet>
            <servlet-name>Faces Servlet</servlet-name>
            <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>Faces Servlet</servlet-name>
            <url-pattern>/faces/*</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>
                30
            </session-timeout>
        </session-config>
        <welcome-file-list>
            <welcome-file>faces/edit_friend.xhtml</welcome-file>
        </welcome-file-list>
    </web-app>
    Voici mon Managed Bean CurrentFriend :

    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
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package com.loloof64.my_friends.mbeans;
     
    import com.loloof64.my_friends.core.SingleFriend;
    import java.io.Serializable;
    import javax.enterprise.context.SessionScoped;
    import javax.inject.Named;
     
    /**
     *
     * @author laurent-bernabe
     */
    @Named
    @SessionScoped
    public class CurrentFriend extends SingleFriend implements Serializable {
     
    }
    Voici sa classe mère SingleFriend :
    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
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package com.loloof64.my_friends.core;
     
    /**
     *
     * @author laurent-bernabe
     */
    public class SingleFriend {
     
        /**
         * Creates a new instance of SingleFriend
         */
        public SingleFriend() {
        }
     
        public String getFirstName() {
            return firstName;
        }
     
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
     
        public String getLastName() {
            return lastName;
        }
     
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
     
        public int getAge() {
            return age;
        }
     
        public void setAge(int age) {
            this.age = age;
        }
     
        private String firstName;
        private String lastName;
        private int age;
     
    }
    voici la page edit_friend.xhtml

    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
     
    <?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://xmlns.jcp.org/jsf/html"
          xmlns:f="http://xmlns.jcp.org/jsf/core">
        <h:head>
            <title>My Friends : friend editing</title>
        </h:head>
        <h:body>
            <h2>Informations about your friend : </h2>
            <h:form>
                <table>
                    <tr>
                        <td>First name</td>
                        <td><h:inputText id="first_name" value="#{currentFriend.firstName}"
                                label="first name" required="true"/></td>
                    </tr>
                    <tr>
                        <td>Last name</td>
                        <td><h:inputText id="last_name" value="#{currentFriend.lastName}"
                             label="last name" required="true"/></td>
                    </tr>
                    <tr>
                        <td>Age</td>
                        <td><h:inputText id="age" value="#{currentFriend.age}"
                             label="age" required="true">
                                <f:validateLongRange minimum="0" maximum="200" />
                            </h:inputText></td>
                    </tr>
                </table>
                <p><h:commandButton value="Submit" action="add_friend"/></p>
                <p><h:message for="age"/></p>
            </h:form>
        </h:body>
    </html>
    Voici la page add_friend.xhtml:

    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
     
    <?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://xmlns.jcp.org/jsf/html">
        <h:head>
            <title>My Friends : friend recording</title>
        </h:head>
        <h:body>
            <p>Recorded your friend : </p>
            <ul>
                <li>First name : #{currentFriend.firstName} </li>
                <li>Last name : #{currentFriend.lastName} </li>
                <li>Age : #{currentFriend.age} </li>
            </ul>
            <h:form>
                <h:commandLink value="Go back" action="edit_friend"/>
            </h:form>
        </h:body>
    </html>
    Voici le filtre :
    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
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package com.loloof64.my_friends.core;
     
    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
     
    /**
     *
     * @author laurent-bernabe
     */
    public class UTF8_Filter implements Filter{
     
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
     
        }
     
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            request.setCharacterEncoding("UTF-8");
            chain.doFilter(request, response);
        }
     
        @Override
        public void destroy() {
     
        }
     
    }
    Je développe sous Netbeans 8.0 avec GlassFish 4.
    Je vous remercie d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par tails Voir le message
    En effet, il ne semble pas gérer correctement les caractères spéciaux tels que les accents.
    Tu peux nous dire ce que tu as comme symptômes? Ce n'est pas clair là.

  3. #3
    Membre chevronné
    Avatar de tails
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 799
    Points : 2 148
    Points
    2 148
    Billets dans le blog
    15
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tu peux nous dire ce que tu as comme symptômes? Ce n'est pas clair là.
    Oui en effet (trop pressé )

    Les fichiers dont j'ai donné les sources font partie d'un projet Web JavaEE en JSF, déployé sur GlassFish 4. Pour ce faire, j'utilise un template de Web project sous Netbeans 8.0

    Il suffit simplement d'entrer un nom/prénom tel que René, une fois que la page est validée, j'obtiens une déformation de ce dernier en René sur la page.
    J'ai peut être oublié de configurer quelque chose en utf-8.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si tu écrit toi même "René" dans le fichier xhtml, ça s'affiche correctement?

    En ce qui concerne le décodage des caractères, le filtre n'est pas l'idéal. Il faut plutôt configurer correctement le serveur glassfish

    http://docs.oracle.com/cd/E18930_01/...417/beavn.html

    Ca ne ferais pas de tord non plus de forcer l'encodade sur tes <form> que le browser sache quoi faire pour le submit.

  5. #5
    Membre chevronné
    Avatar de tails
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 799
    Points : 2 148
    Points
    2 148
    Billets dans le blog
    15
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Si tu écrit toi même "René" dans le fichier xhtml, ça s'affiche correctement?

    En ce qui concerne le décodage des caractères, le filtre n'est pas l'idéal. Il faut plutôt configurer correctement le serveur glassfish

    http://docs.oracle.com/cd/E18930_01/...417/beavn.html

    Ca ne ferais pas de tord non plus de forcer l'encodade sur tes <form> que le browser sache quoi faire pour le submit.
    Si j'écris René en dur sur la page add_friend, j'ai bien l'accent écrit correctement.

    Après je n'ai pas compris pourquoi utiliser un filtre n'est pas l'idéal : si je résoud le problème en éditant la configuration de Glassfish, ce ne sera pas portable, en particulier si je veux transférer le code sur un serveur JBoss (j'utilise Glassfish pour suivre le tutoriel officiel de JavaEE 7).

    Sinon, je n'ai toujours pas trouvé comment corriger le problème avec l'utilisation de mon filtre.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    parce que le request.setParameterEncoding n'est possible que si aucun outil, aucun filtre dans le serveur n'a déjà parsé les paramètres.

    void setCharacterEncoding(java.lang.String env)
    throws java.io.UnsupportedEncodingException
    Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader(). Otherwise, it has no effect.
    D'où l'aspect non idéal. D'ailleurs, t'es visiblement dans un cas où le filtre ne marche pas.
    C'est idéal par le conteneur car le décodage des paramètres, c'est SON boulot

  7. #7
    Membre chevronné
    Avatar de tails
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 799
    Points : 2 148
    Points
    2 148
    Billets dans le blog
    15
    Par défaut Merci :D
    Citation Envoyé par tchize_ Voir le message
    parce que le request.setParameterEncoding n'est possible que si aucun outil, aucun filtre dans le serveur n'a déjà parsé les paramètres.



    D'où l'aspect non idéal. D'ailleurs, t'es visiblement dans un cas où le filtre ne marche pas.
    C'est idéal par le conteneur car le décodage des paramètres, c'est SON boulot
    Merci : problème résolu
    J'ai bien compris que je dois fixer l'encodage sur le serveur où je déploie mon code.

    Par ailleurs, est-ce avec l'attribut "accept-charset" que je peux forcer l'encodage sur les balises <h:form> ?

+ 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