我正在尝试使用IE条件注释来声明CSS资源:
<h:outputStylesheet name="common.css" library="css" />
<!--[if IE]>
<link rel="stylesheet" type="text/css" href="#{resource['css:ie.css']}" />
<![endif]-->
然而,这似乎不起作用。我在生成的HTML输出中看到了这一点:
<link type="text/css" rel="stylesheet" href="/context/faces/javax.faces.resource/common.css?ln=css" />
<!--[if IE]>
<link rel="stylesheet" type="text/css" href="/context/faces/javax.faces.resource/ie.css?ln=css"/>
<![endif]-->
没有条件评论,它可以正常工作。我没有使用上下文参数javax.faces.FACELETS_SKIP_COMMENTS
。这是怎么造成的,我该如何解决?
答案 0 :(得分:7)
这确实不会起作用,因为Facelets隐式地HTML转义了注释的内容。您最好的选择是将其放在<h:outputText escape="false">
中,如下所示:
<h:outputText value="<!--[if IE]><link rel="stylesheet" type="text/css" href="/#{resource['css:ie.css']}" /><![endif]-->" escape="false" />
然而,这是一条丑陋的线条。 The OmniFaces JSF utility library的目的是<o:conditionalComment>
:
<o:conditionalComment if="IE">
<link rel="stylesheet" type="text/css" href="#{resource['css:ie.css']}" />
</o:conditionalComment>
无关,您并没有以正确的方式使用library
属性。它应该标识一个共同的“主题”,而不是放置文件的子文件夹,只需将该子文件夹放在name
属性中。另请参阅What is the JSF resource library for and how should it be used?
<h:outputStylesheet name="css/common.css" />
<o:conditionalComment if="IE">
<link rel="stylesheet" type="text/css" href="#{resource['css/ie.css']}" />
</o:conditionalComment>
答案 1 :(得分:3)
我建议
<h:outputText value="<!--[if IE]> " escape="false"/>
<link rel="stylesheet" type="text/css" href="#{request.contextPath}/faces/javax.faces.resource/ie.css?ln=css" />
<h:outputText value=" <![endif]-->" escape="false"/>
所以你只能逃避一小段代码而#{request.contextPath}按预期工作