如何将JBOSS 5编码设置为前JBoss 4.1的行为?
-
29-09-2019 - |
题
它是使用接缝2.2构建的应用程序,它在JBOSS 4.1.2下完美运行。由于我的ISP的支持,我将不得不将JBOSS升级到5.1版。我确实尝试在JBOSS 5下运行同一应用程序,一切看起来都不错,但是一件事失败了。
这是一件代码,生成了一些JSON来馈送使用的图表 开放式闪存图表库. 。我也使用 JOFC库 为这些图表生成JSON。好吧,我们使用的方法基本上有一个接缝工厂,该接缝工厂打印出JSON,而我们确实将该工厂在空白的.xhtml页面中引用,从图表加载所需的JSON以正确渲染。关注一些片段:
接缝工厂被调用的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的行中,登录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编码替换的双引号:
{"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}
我已经检查了OS Locale,并且在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用于应用程序中的所有资源和页面。
有线索吗?
提前TX。 [
解决方案
我查看了JSF文档以查看它并找到了f:verbatim标签。它解决了问题。现在,我的.xhtml页面打印了JSON字符串,就像:
<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字符串没有更改,并且图形呈现正确。
其他提示
我不知道这是否会有所帮助,但我会尝试的。
在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 " you can do this
jsonString.replaceAll(""","\\\"");
我不确定正则正则可以正常工作,但是您可以尝试。您也可以使用 字符串capeutils 从Apache Commons正确逃脱所有HTML。
String output=new String(input.getBytes(),"UTF-8");
像这样的奉献解决了问题。