JSF : Unicode Encoding

By , 13/10/2010

Par défaut, l’implémentation de référence de JSF (Mojarra 1.2) convertit tous les caractères non ASCII en entités HTML. Cela peut provoquer des problèmes d’encoding. Il est possible de modifier ce comportement en ajoutant le paramètre com.sun.faces.disableUnicodeEscaping dans le fichier web.xml avec l’une de ces valeurs :

  • true : aucun caractère ne sera transformé
  • false : tous les caractères non ASCII seront encodés en entités HTML quelque soit l’encoding de la réponse (c’est le comportement par défaut)
  • auto : suivant le type d’encoding de la réponse :
    • UTF : pas d’encoding effectué
    • ISO-8859-1 : les caractères sont transformés en entité HTML

Voici comment cela se traduit dans le fichier web.xml :

<context-param>
    <param-name>com.sun.faces.disableUnicodeEscaping</param-name>
    <param-value>true<param-value>
</context-param>

De mon coté, je n’ai jamais eu de problème avec le mode par défaut à l’exception d’un développement qui utilisait Fiji et amChart car amChart n’affiche pas les entités HTML en caractères latins.

3 Responses to “JSF : Unicode Encoding”

  1. Sepal says:

    Malheureusement, toujours le même souci de mon côté, les é sont transformés en é, du coup les formulaires ne fonctionnent pas…

    Un autre moyen de procéder pour s’en sortir ?

    Merci :)

    • Yan says:

      Bonjour,

      Ce problème peut venir de plusieurs endroits différents.

      Dans mon cas partilulier, j’ai remarqué ce comportement uniquement lorsque j’utilisais une librairie non compatible avec les entités HTML. Il s’agissait de librairies qui pilotaient du flash à partir de Javascript.

      L’ajout de la ligne d’entête suivante dans les fichiers XHTML pourrait suffire à plus avoir de problème :
      < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

      Ou bien le plus souvent je pense, il peut être nécessaire de déclarer l’encodage dans le meta-data du XHTML :

      <h:head>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         ...
      </h:head>
      

Leave a Reply


− three = 6

OfficeFolders theme by Themocracy