17

这是我在 Eclipse 中的源代码文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<!--[if lt IE 9]>
    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>

<body>

</body>
</html>

当我在 IE9 中查看它时,它会呈现文本:

<!--[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]-->

如果我查看源代码,它会说:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<!--[if lt IE 9]&gt;

      &lt;script src=&quot;http://html5shim.googlecode.com/svn/trunk/html5.js&quot;&gt;&lt;/script&gt;

    &lt;![endif]-->
</head>

<body>


</body>
</html>

Faces Servlet 提供服务后源发生变化的任何原因?

4

3 回答 3

17

已知问题,JSF 渲染逃脱了评论。您可以通过使用<h:outputText escape="false">HTML 实体来解决它。您还可以使用 OmniFaces<o:conditionalComment>以更好的方式解决它。另见展示网站:

<o:conditionalComment>呈现有条件的评论。条件注释是 IE 特有的功能,它使开发人员能够(out)注释 HTML 块,具体取决于客户端是否使用 IE,如果是,甚至是哪个版本。它们经常与 CSS 样式表结合使用,如下所示:

<!--[if lte IE 7]>
    <link rel="stylesheet" href="ie6-ie7.css" />
<![endif]-->

然而,Facelets 将评论的内容呈现为 HTML 转义,使其无法使用。

<!--[if lte IE 7]&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;ie6-ie7.css&quot; /&gt;
&lt;![endif]-->

此外,如果javax.faces.FACELETS_SKIP_COMMENTS上下文参数设置为,true那么它甚至根本不会被渲染。您需要使用丑陋的<h:outputText escape="false">.

<h:outputText 
    value="&lt;!--[if lte IE 7]&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;ie6-ie7.css&quot; /&gt;&lt;![endif]--&gt;"
    escape="false" />

该组件旨在解决此问题。

<o:conditionalComment if="lte IE 7">
    <link rel="stylesheet" href="ie6-ie7.css" />
</o:conditionalComment>

请注意,您不能将其与它一起使用,<h:outputStylesheet>因为它会隐式地重新定位为<h:head>.

于 2012-12-26T23:53:31.983 回答
9

这有效:

<h:outputText escape="false" value="&lt;!--[if lt IE 9]&gt;   &lt;script src=&quot;http://html5shim.googlecode.com/svn/trunk/html5.js&quot;&gt;&lt;/script&gt;  &lt;![endif]--&gt;"></h:outputText>
于 2012-12-26T23:58:48.980 回答
2

我使用了 f:verbatim,更清晰。

例如

<f:verbatim>
    <!--[if gte IE 8]>
       <script type="text/javascript">
        //<![CDATA[
        /** Javascript **/
        //]]>
        </script>
    <![endif]-->
</f:verbatim>

JSF 核心标记参考

注意: 此标记自 JSF 2.0(2009 年 12 月)起已弃用。它仅适用于 JSP

于 2015-12-29T22:52:07.863 回答