Frage

Es ist eine Anwendung, mit Naht 2.2 gebaut wurde und es läuft perfekt unter Jboss 4.1.2. Aufgrund der Unterstützung von meinem ISP Ich werde JBoss-Version 5.1 aktualisieren. Ich habe versucht gleiche App unter JBoss 5 und alles sah gut aus, aber eine einzige Sache nicht ausgeführt werden.

Es ist ein Stück Code, das einig JSon erzeugt ein Diagramm zu füttern gebaut mit öffnen Flash Chart Bibliotheken . Ich benutze auch JOFC Bibliotheken die JSon für diese Diagramme zu erzeugen. Nun, der Ansatz, den wir verwendet haben, im Grunde hat eine Naht Fabrik, die eine JSon druckt und als wir dieses Werk in einer leeren .xhtml Seite verweisen, von wo die Grafik lädt die erforderliche JSon richtig zu machen. Folgen Sie einige Auszüge:

Die xhtml Seite, wo die Naht Fabrik aufgerufen wird:

<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> 

Die Factory-Methode, die den JSON-String erzeugt:

@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;

Nun, die Code zeigt auch, dass wir die JSON-String tryied codieren, vor dem Senden aber wieder keinen Erfolg. In der Zeile, wo es gedruckt wird json den JSON-String log.info perfekt erhalten ist, aber unter Verwendung von JBoss5, was passiert, ist, dass die "(doppelte Anführungszeichen) Zeichen durch HTML-Escape-Zeichen ersetzt werden.

Die Folge JSON-String wird erwartet, dass man richtig das Diagramm zu füttern und diese verhält sich richtig unter 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} 

Aber als JBoss5 die Folgezeichenfolge gedruckt wird, beachten Sie den HTML kodieren Ersatz für doppelte Anführungszeichen:

{&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}

Ich habe überprüft bereits O.S locale und habe auch eine Konfiguration auf Jboss http Kanal, den Körper in server.xml zu kodieren:

<!-- 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"/>

Es hat nicht funktioniert. Wir verwenden UTF-8 für alle Ressourcen und Seiten in unserer App.

Irgendwelche Hinweise?

Tx im Voraus. [] S

War es hilfreich?

Lösung

habe ich einen Blick auf JSF Dokumentation, sie zu überprüfen und fand f: wörtlich Tag. Es das Problem behoben. Nun meine .xhtml Seite, wo der JSON-String gedruckt wird, ist wie:

<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>

Jetzt das Ergebnis json Zeichenfolge nicht geändert wird und die Grafik macht richtig.

[] s

Andere Tipps

Ich weiß nicht, ob dies dazu beitragen wird, aber ich werde es versuchen.

In components.xml Satz

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

Erstellen Sie einen Filter, der alles auf UTF-8

gesetzt wird
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 {}

}

Und aktivieren Sie diese Filter in web.xml

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

Wenn dies nicht hilft, können Sie manuell die Zeichenfolge kodieren

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

Ich bin nicht sicher, dass der Regex korrekt funktionieren, aber man kann versuchen. Sie können vielleicht auch benutzen StringEscapeUtils aus Apache Commons korrekt alle HTML zu entkommen.

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

wie diese gibt das Problem gelöst werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top