我已经从Rich Faces 3.3升级到Rich Faces 4.2,因为Ajax不适用于IE9。现在它仍然不起作用。
收到响应后,IE会收到一个JS错误 “ SCRIPT58734:从源头上来的东西”:c00ce56e。 在尝试时
data.responseText=request.responseText
在jsf.js.html?ln = javax.faces&conversationContext = 2,第1行第21747行
我认为是因为HTTP标头错误
Content-Type: text/xml;charset=UTF8
应该
Content-Type: text/xml;charset=UTF-8
此处服务器的原始响应
HTTP/1.1 200 OK Server: Apache-Coyote/1.1 X-Powered-By: JSF/2.0 Cache-Control: no-cache Content-Type: text/xml;charset=UTF8 Content-Length: 293 Date: Tue, 17 Apr 2012 15:25:22 GMT <?xml version='1.0' encoding='UTF8'?> <partial-response><changes><update id="outtest"><![CDATA[<span id="outtest"><span class="outhello">Hello !</span></span>]]></update><update id="javax.faces.ViewState"><![CDATA[2809980525147413088:295565165947012503]]></update></changes></partial-response>
我正在使用
javaee-web-api 6 myfaces-orchestra-core 1.4 Hibernate 4.1 Spring 3.1.1 Richfaces 4.2.0 Primefaces 3.2 jsf-api+impl 2.1.7
jstl 1.2
并在tomcat 7上运行
编辑:现在我确定其标题。我在charles-proxy中设置了一个断点并手动编辑了响应头,编辑后的http头IE9显示了正确的结果,没有任何错误
您的分析是正确的。标头中的charset属性Content-Type错误,IE9对此进行了扼制,并带有错误c00ce56e。
charset
Content-Type
c00ce56e
默认情况下,JSF使用从中获取的ServletRequest#getCharacterEncoding()。通常,这默认为客户端指定的默认值,或者null如果没有,则为默认值(通常是这种情况)。通常,某些调用的自定义过滤器可以覆盖此方法request.setCharacterEncoding()。
ServletRequest#getCharacterEncoding()
null
request.setCharacterEncoding()
由于不正确的字符集,这只能意味着你的Web应用程序调用的地方request.setCharacterEncoding()用"UTF8"替代"UTF-8"。
"UTF8"
"UTF-8"
我将开始检查所有过滤器及其配置。