4

我在 Glassfish 2.1 上使用 JSF 2.0 和 RichFaces 3.3.3。我创建了一个带有模式面板的 Web 应用程序,该面板在我的计算机(本地服务器)中运行良好。由于特定 RichFaces 版本的 IE9 不兼容,我X-UA-Compatible: IE=8在我的 HTML 头中使用了元标记:

<meta http-equiv="X-UA-Compatible" content="IE=8" />

当我在本地环境中部署时,模态面板如下所示:

1好

但是当我在生产服务器中部署时,我遇到了问题。

如果我使用带有兼容性视图的 IE (来源:geneanet.org ,我的模态面板如下所示:补偿

2不行

如果我不使用兼容性视图,我会看到模态面板,但我所有的 ajax 按钮都不起作用。

这是如何引起的,我该如何解决?

4

1 回答 1

7

来自 IE 开发人员文档,定义文档兼容性

...

X-UA-Compatible头不区分大小写;但是,它必须出现在网页的标题(HEAD 部分)中,在除标题元素和其他元元素之外的所有其他元素之前

...

RichFaces 3.3.3 默认自动包含<link>引用 RichFaces 特定 CSS 样式表的元素,位于头顶,位于原始模板内容之前。<head>因此, HTML元素X-UA-Compatible风格的标头在RichFaces 3.3.3 webapp 中总是无法工作。它在您的本地开发环境中运行良好很可能是因为您已将 localhost 站点添加到浏览器配置中的 IE8 兼容站点列表中。那时标题的存在不再重要。<meta>X-UA-Compatible

最好的办法是X-UA-Compatible直接在 HTTP 响应本身上设置标头,而不是作为 HTML 元标记。您可以使用一个简单的servlet 过滤器来做到这一点,该过滤器被映射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);
}
于 2012-09-12T15:45:17.603 回答