代码之家  ›  专栏  ›  技术社区  ›  groo

如何将JBoss 5编码设置为类似于以前的JBoss 4.1?

  •  1
  • groo  · 技术社区  · 15 年前

    这是一个使用Seam2.2构建的应用程序,它在JBoss4.1.2下运行得很好。由于我的ISP的支持,我必须将JBoss升级到5.1版。我试着在JBoss 5下运行同样的应用程序,一切看起来都很好,但有一件事失败了。

    它是一段代码,生成一些JSon来提供使用 Open Flash Chart libraries JOFC libraries 为这些图表生成JSon。我们使用的方法基本上有一个seam工厂,它打印一个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转义字符替换。

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

    我已经检查了O.S语言环境,还对jboss http channel进行了配置,以将正文编码为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。

    提前发送。 []秒

    3 回复  |  直到 15 年前
        1
  •  2
  •   groo    15 年前

    我查看了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字符串没有更改,图形呈现正确。

    []秒

        2
  •  1
  •   Shervin Asgari    15 年前

    我不知道这是否有用,但我会努力的。

    在components.xml集合中

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

    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;","\\\"");
    

    StringEscapeUtils 从Apache Commons正确转义所有HTML。

        3
  •  1
  •   EdChum Arthur G    14 年前
    String output=new String(input.getBytes(),"UTF-8");
    

    这样的付出解决了问题。