如何在JSF中使用Internet Explorer条件注释



这是我在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服务后源代码发生了变化?

已知问题,JSF呈现会转义注释。您可以通过使用<h:outputText escape="false">和HTML实体来解决这个问题。您还可以使用OmniFaces <o:conditionalComment>以更好的方式解决它。另见展示站点:

<o:conditionalComment>呈现条件注释。条件注释是IE特有的功能,它允许开发人员根据客户端是否使用IE,甚至是哪个版本来(out)注释HTML块。它们通常与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>的直接子节点。

这行得通:

<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>

我逐字使用了f:,这样更简洁。

例如

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

JSF核心标签参考

注意:这个标签自JSF 2.0(2009年12月)起已弃用。它只适用于JSP

相关内容

  • 没有找到相关文章

最新更新