0

Je travaille sur un projet développé avec le frontal JSF 2.0 (Mojarra 2.0.3) et déployé sur le serveur Glassfish v.3.0.1. L'application doit accepter le charset ISO-8859-2 et écrire des données dans la base de données MySql. Au problème est que les données ne sont pas dans le bon charset. La demande en-tête de Http a la valeur d'attribut:Problème de jeu de caractères Glassfish JSF 2.0

content-type: application/x-www-form-urlencoded; charset=UTF-8

Le problème ne vient pas de réponse, car les données peuvent être affichées correctement lors de la lecture de la base de données. En outre, l'URL de connexion MySql doit être correcte car elle est définie pour la collation latin2. J'ai même essayé de créer custom filter, mais sans aucun résultat.

Des idées comment puis-je accomplir pour accepter le jeu de caractères correct?

Merci d'avance.

+0

Je suppose que vous utilisez Facelets si vous utilisez JSF 2.0. Alors, avez-vous ce '' En haut de votre page Facelet (XHTML). Changez simplement ** UTF-8 ** en ** ISO-8859-2 **. Vérifiez également si vous avez des balises META définies comme ''. Changez également le codage de ISO-8859-2. Enfin, vérifiez votre définition 'DEFAULT CHARSET = ISO-8859-2' pour vos tables MySQL. Si ce n'est pas ISO-8859-2 alors changez-le en utilisant la commande SQL 'ALTER TABLE'. Cela devrait être ça. - :) – ChuongPham

+0

@ user463053 Merci pour votre réponse. Malheureusement, j'ai renoncé à essayer de coder ISO-8859-2 et de passer à l'encodage UTF-8. Oui, j'utilise Facelets et mes pages avaient '' tag. Le jeu de caractères MySql par défaut était latin2 et connectionURL contenait 'useUnicode = true & characterEncoding = ISO8859_2 & characterSetResults = latin2'. Mais, je vais tout essayer encore une fois. – Vladimir

+0

Si après avoir tout réglé sur ISO-8859-2 et que cela ne fonctionne toujours pas, vous pouvez toujours écrire un filtre (voir ma réponse) pour forcer l'encodage ISO-8859-2. Cependant, le changer en UTF-8 devrait fonctionner pour vous puisque le jeu de caractères ISO-8859-2 peut être trouvé en UTF-8 - et être UTF-8 signifie que vous pouvez ajouter d'autres jeux de caractères pour d'autres langues à l'avenir sans trop de bruit . :) – ChuongPham

Répondre

0

Vous pouvez toujours forcer ISO-8859-2 en créant un filtre et en le définissant dans votre web.xml. Au strict minimum, le filtre devrait avoir:

public class CustomFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     try { 
      if ((request instanceof HttpServletRequest) 
       && (response instanceof HttpServletResponse)) { 
       request.setCharacterEncoding("ISO-8859-2"); 
       response.setContentType("text/html; charset=ISO-8859-2") 
      } 
      chain.doFilter(request, response); 
     } catch (Exception e) { 
      // Do your logging here 
     } 
    } 
}