1

这是一个使用 seam 2.2 构建的应用程序,它在 Jboss 4.1.2 下完美运行。由于我的 ISP 的支持,我必须将 JBoss 升级到 5.1 版。我确实尝试在 JBoss 5 下运行相同的应用程序,一切看起来都很好,但只有一件事失败了。

它是一段代码,它生成一些 JSon 以提供使用Open Flash Chart 库构建的图表。我还使用JOFC 库为这些图表生成 JSon。好吧,我们使用的方法基本上有一个接缝工厂,它打印一个 JSon,然后我们在一个空白的 .xhtml 页面中引用这个工厂,图表从该页面加载所需的 JSon 以正确呈现。按照一些片段:

调用 seam 工厂的 xhtml 页面:

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

生成 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;

好吧,代码还显示我们在发送之前尝试过对 json 字符串进行编码,但还是没有成功。在将 json 打印到 log.info 的行中,json 字符串被完美地保留了下来,但是使用 JBoss5 时会发生“(双引号)字符被 html 转义字符替换。

下面的 json 字符串有望正确地提供图表,并且在 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} 

但与使用 JBoss5 相比,会打印以下字符串,请注意双引号的 html 编码替换:

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

我已经检查了操作系统区域设置,并且还在 jboss http 通道上进行了配置,以对 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"/>

它没有用。我们对应用程序中的所有资源和页面使用 UTF-8。

有什么线索吗?

提前发送。[]s

4

3 回答 3

2

我查看了 jsf 文档以查看它并找到 f:verbatim 标记。它解决了这个问题。现在我打印 json 字符串的 .xhtml 页面如下所示:

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

现在结果 json 字符串没有更改,并且图形正确呈现。

[]s

于 2010-11-07T03:22:04.503 回答
1
String output=new String(input.getBytes(),"UTF-8");

像这样给予解决了这个问题。

于 2011-08-16T15:15:18.690 回答
1

我不知道这是否会有所帮助,但我会尝试。

在 components.xml 集中

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

创建一个过滤器,将所有内容设置为 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 {}

}

并在 web.xml 中启用此过滤器

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

如果这没有帮助,您可以手动编码字符串

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

我不确定正则表达式能否正常工作,但您可以尝试。您也可以使用Apache Commons 的StringEscapeUtils来正确转义所有 HTML。

于 2010-11-05T15:53:44.550 回答