Question

Il est une application qui a été construit en utilisant la couture 2.2 et il est en cours d'exécution parfaitement sous Jboss 4.1.2. En raison de l'appui de mon FAI je vais devoir mettre à jour à la version JBoss 5.1. J'ai essayé d'exécuter même application sous JBoss 5 et tout avait l'air bien, mais une chose a échoué.

Il est un morceau de code qui génère une JSON pour alimenter un graphique en utilisant Ouvert bibliothèques Graphique flash . Je l'utilise aussi JOFC bibliothèques pour générer JSON pour ces cartes. Eh bien l'approche que nous avons utilisée a essentiellement une usine de couture qui imprime un JSON et que nous faisons référence à cette usine dans une page xhtml vide où les charges de tableau JSON nécessaire pour rendre correctement. Suivez quelques extraits:

La page xhtml où est appelée l'usine de couture:

<f:view xmlns="http://www.w3.org/1999/xhtml"
   xmlns:f="http://java.sun.com/jsf/core"
   contentType="text/json; charset=UTF-8">

   #{jsonGraficoPesoUsuario}

</f:view> 

Le procédé de l'usine qui génère la chaîne JSON:

@Factory("jsonGraficoPesoUsuario")
 public String graficoPesoUsuario()
 {
...

   String jsonString = chart.toString();
   log.info("JSonString ==>> " + jsonString);
//   try {
//    jsonString = URLEncoder.encode(jsonString, "UTF-8");
//   } catch (UnsupportedEncodingException e) {
//    log.error("Erro ao tentar fazer o encode da string json ==>> " + e.getMessage());
//    e.printStackTrace();
//   }
   return jsonString;

Eh bien le code montre également que nous avons tryied codant pour la chaîne JSON avant de l'envoyer, mais encore une fois sans succès. Dans la ligne où il est imprimé JSON log.info la chaîne JSON est parfaitement conservée, mais en utilisant JBoss5 ce qui se passe est que les "(guillemets doubles) caractères sont remplacés par des caractères d'échappement html.

La chaîne JSON de suivi est prévu pour alimenter correctement le tableau et se comporte correctement sous ce jboss4:

{"y_axis":{"min":100,"colour":"#96A9C5","grid-colour":"#DDDEE1","max":112},"title":{"text"
:"Gráfico de evolução de Peso"},"bg_colour":"#FFFFFF","is_decimal_separator_comma":1,"elements":[{"text":"Peso","values":[100.5,101.5,102.5,
102,103,107,109,110.5,108],"font-size":10,"type":"line","tip":"Linha do Peso"}],"num_decimals":2,"is_fixed_num_decimals_forced":1,"x_axis":{
"colour":"#96A9C5","grid-colour":"#DDDEE1","labels":{"rotate":"-24","labels":["01/05/10","15/05/10","25/05/10","01/06/10","09/06/10","25/06/
10","05/07/10","10/07/10","20/07/10"]}},"is_thousand_separator_disabled":0} 

Mais que d'utiliser JBoss5 la chaîne de suivi est imprimé, notez le remplacement encode html pour des guillemets doubles:

{&quot;y_axis&quot;:{&quot;min&quot;:100,&quot;colour&quot;:&quot;#96A9C5&quot;,&quot;grid-colour&quot;:&quot;#DDDEE1&quot;,&quot;max&quot;:112},&quot;title&quot;:{&quot;text&quot;:&quot;Gr&aacute;fico de evolu&ccedil;&atilde;o de Peso&quot;},&quot;bg_colour&quot;:&quot;#FFFFFF&quot;,&quot;is_decimal_separator_comma&quot;:1,&quot;elements&quot;:[{&quot;text&quot;:&quot;Peso&quot;,&quot;values&quot;:[100.5,101.5,102.5,102,103,107,109,110.5,108],&quot;font-size&quot;:10,&quot;type&quot;:&quot;line&quot;,&quot;tip&quot;:&quot;Linha do Peso&quot;}],&quot;num_decimals&quot;:2,&quot;is_fixed_num_decimals_forced&quot;:1,&quot;x_axis&quot;:{&quot;colour&quot;:&quot;#96A9C5&quot;,&quot;grid-colour&quot;:&quot;#DDDEE1&quot;,&quot;labels&quot;:{&quot;rotate&quot;:&quot;-24&quot;,&quot;labels&quot;:[&quot;01/05/10&quot;,&quot;15/05/10&quot;,&quot;25/05/10&quot;,&quot;01/06/10&quot;,&quot;09/06/10&quot;,&quot;25/06/10&quot;,&quot;05/07/10&quot;,&quot;10/07/10&quot;,&quot;20/07/10&quot;]}},&quot;is_thousand_separator_disabled&quot;:0}

Je l'ai déjà vérifié locale O.S et a fait également une configuration sur jboss canal http pour coder le corps dans server.xml:

<!-- A HTTP/1.1 Connector on port 8080 -->
      <Connector protocol="HTTP/1.1" port="8080" address="${jboss.bind.address}" 
               connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true"/>

Il ne fonctionne pas. Nous utilisons UTF-8 pour toutes les ressources et les pages de notre application.

Les indices?

Tx à l'avance. [] S

Était-ce utile?

La solution

Je pris un coup d'œil à la documentation de jsf pour examiner et trouvé f: tag mot pour mot. Il fixe la question. Maintenant, ma page xhtml où la chaîne JSON est imprimé est comme:

<f:view xmlns="http://www.w3.org/1999/xhtml"
   xmlns:f="http://java.sun.com/jsf/core"
   contentType="text/json" >

  <f:verbatim> 
   #{jsonGraficoPesoUsuario}
   </f:verbatim>
</f:view>

Maintenant, la chaîne JSON résultat ne change pas et l'image rend bien.

[] s

Autres conseils

Je ne sais pas si cela aide, mais je vais essayer.

Dans components.xml ensemble

<web:character-encoding-filter encoding="UTF-8" override-client="true" url-pattern="*.seam" />

Créer un filtre qui va mettre tout en UTF-8

public class UTF8Filter implements Filter {

  public void destroy() {}

  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)   throws IOException, ServletException {
    // set encoding to UTF-8
    req.setCharacterEncoding("UTF-8");
    chain.doFilter(req, res);
    return;
  }

  public void init(FilterConfig arg0) throws ServletException {}

}

et activer ce filtre dans web.xml

<filter>
  <filter-name>UTF8 Filter</filter-name>
  <filter-class>my.package.filter.UTF8Filter</filter-class>
</filter>

Si cela ne l'aide, vous pouvez encoder manuellement la chaîne

 //If you only have problem with &quot; you can do this
 jsonString.replaceAll("&quot;","\\\"");

Je ne suis pas sûr que l'expression rationnelle fonctionne correctement, mais vous pouvez essayer. Vous pouvez également utiliser peut-être StringEscapeUtils de Apache Commons pour échapper correctement tous les fichiers HTML.

String output=new String(input.getBytes(),"UTF-8");

Donner comme cela a résolu le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top