2014-07-08 4 views
1

Lorsque j'essaie d'ajouter une offre dans l'Administrateur Broadleaf, les signes euro (€) du nom ou de la description sont convertis en ⬠après l'enregistrement. La chose étrange à ce sujet est que ce comportement ne se produit pas lors de l'enregistrement d'un code pour cette offre. Par exemple:Encodage UTF-8 Broadleaf

  • Je crée une promo appelé "€ 5 promo"
  • Après l'enregistrement obtiendrai: â¬5 promo (mauvais)
  • ajouter un code pour cette promo appelé "€ 5 code"
  • Après avoir enregistré il ressemblera à ceci: €5 code (bonne)

Je chose qu'il a quelque chose à voir avec l'économie, parce que quand je modifie le champ dans la base de données, il affiche correctement. Lorsque je tente de le modifier et enregistrer les symboles étranges prennent encore ...

EDIT 1

JerryOz était très proche de la solution. La seule chose que je besoin d'ajouter (à côté de sa solution) était le code ci-dessous pour mon web.xml:

<filter> 
    <filter-name>encodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>encodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Répondre

2

Le problème est que l'application ne soit pas encodage correctement quand il va à la base de données. Si vous utilisez Tomcat, ajoutez connectionPropeties à vos ressources dans context.xml. Cela va encoder en UTF-8 et permettre aux caractères spéciaux d'être sauvegardés correctement dans la base de données. Voici un exemple:

<Resource name="jdbc/web" auth="Container" type="javax.sql.DataSource" 
      maxActive="30" maxIdle="60" maxWait="10000" 
      username="username" password="password" driverClassName="com.mysql.jdbc.Driver" 
      connectionProperties="useUnicode=true;characterEncoding=utf8;" 
      url="jdbc:mysql://localhost/broadleaf"/> 

Vous aurez également besoin de configurer vos connecteurs avec URIEncoding="UTF-8" en server.xml pour vous assurer que les paramètres de la requête GET s'encodés correctement. Cela permettra de filtrer les noms avec les caractères spéciaux dans l'admin. Voici un exemple:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" 
      URIEncoding="UTF-8"/> 

Ceci est lié à cette grande réponse ci-dessous qui couvre UTF-8 en Java webapps:

How to get UTF-8 working in Java webapps?

Hope this helps!

+0

Merci pour la réponse rapide, mais cela ne semble pas fonctionner. Toujours le même comportement. Notez que ce n'est pas partout, il y a d'autres champs avec des signes euro qui sont stockés correctement dans la base de données. –

+0

Ceci combiné avec le code supplémentaire (similaire) dans mon web.xml a fait l'affaire. Merci! –