<! - [if IE]>条件注释在Facelets中呈现HTML转义

Mah*_*leh 2 css jsf internet-explorer facelets conditional-comments

我正在尝试使用IE条件注释来声明CSS资源:

<h:outputStylesheet name="common.css" library="css" />
<!--[if IE]>
    <link rel="stylesheet" type="text/css" href="#{resource['css:ie.css']}" />   
<![endif]-->    
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不起作用.我在生成的HTML输出中看到了这个:

<link type="text/css" rel="stylesheet" href="/context/faces/javax.faces.resource/common.css?ln=css" />        
<!--[if IE]&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/context/faces/javax.faces.resource/ie.css?ln=css&quot;/&gt;
&lt;![endif]-->
Run Code Online (Sandbox Code Playgroud)

没有条件注释,它工作正常.我没有使用context参数javax.faces.FACELETS_SKIP_COMMENTS.这是怎么造成的,我该如何解决?

Bal*_*usC 7

这确实不会起作用,因为Facelets隐式地HTML转义了注释的内容.你最好的选择是把它放在<h:outputText escape="false">如下:

<h:outputText value="&lt;!--[if IE]&gt;&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/#{resource['css:ie.css']}&quot; /&gt;&lt;![endif]--&gt;" escape="false" />
Run Code Online (Sandbox Code Playgroud)

然而,这是一个丑陋的线.该OmniFaces JSF工具库中<o:conditionalComment>出于这样的目的:

<o:conditionalComment if="IE">
    <link rel="stylesheet" type="text/css" href="#{resource['css:ie.css']}" />   
</o:conditionalComment>
Run Code Online (Sandbox Code Playgroud)

具体问题无关,您并没有library以正确的方式使用该属性.它应该标识一个共同的"主题",而不是放置文件的子文件夹,只需将该子文件夹放在name属性中.另请参见什么是JSF资源库以及如何使用它?

<h:outputStylesheet name="css/common.css" />
<o:conditionalComment if="IE">
    <link rel="stylesheet" type="text/css" href="#{resource['css/ie.css']}" />   
</o:conditionalComment>
Run Code Online (Sandbox Code Playgroud)