我在Glassfish 2.1上使用JSF 2.0和RichFaces 3.3.3.我已经创建了一个带有模式面板的Web应用程序,该面板在我的计算机(本地服务器)中运行良好.由于特定RichFaces版本的IE9不兼容,我在我的 HTML头中使
<meta http-equiv="X-UA-Compatible" content="IE=8" />
当我在本地环境中部署时,模态面板看起来像这样:
但是当我在生产服务器中部署时,我遇到了问题.
如果我使用IE兼容性视图
comp http://bloges.geneanet.org/public/Blog%20EN/EN-ie8-03.png,我的模态面板看起来像这样:
如果我不使用兼容性视图,我会看到模态面板,但我的所有ajax按钮都不起作用.
这是怎么造成的,我该如何解决?
来自IE开发人员文档, Defining Document Compatibility:…
The
X-UA-Compatible
header is not case sensitive; however, it must appear in the header of the webpage (the HEAD section) before all other elements except for the title element and other meta elements.…
RichFaces 3.3.3默认情况下自动包含< link>元素引用RichFaces特定的CSS样式表,位于原始< head>之前的头顶部.模板内容.因此,HTML< meta>风格的X-UA兼容标题元素总是无法在RichFaces 3.3.3 webapp中工作.它在本地开发环境中正常工作很可能是因为您已在浏览器配置中将localhost站点添加到IE8兼容站点列表中. X-UA-Compatible标头的存在不再重要.
最好的办法是直接在HTTP响应本身而不是HTML元标记上设置X-UA-Compatible标头.您可以使用一个简单的servlet filter来映射到FacesServlet并完成以下工作:
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { ((HttpServletResponse) response).setHeader("X-UA-Compatible", "IE=8"); chain.doFilter(request, response); }