包含 <ui:组合模板时,不会加载 IE 的 CSS 条件>



有 xhtml templ.xhtml布局。

将其包含在其他.xhtml中,例如:

<ui:composition template="/template/templ.xhtml">

在 templ 中定义条件.xhtml例如:

<h:head>
 <h:outputText value="&lt;!--[if lt IE 8]&gt;&lt;h:outputStylesheet library=&quot;css&quot; name=&quot;styleie8.css&quot; /&gt;&lt;![endif]--&gt;" escape="false" />
</h:head>

styleie8.css没有加载,但是当Tomcat运行时某些内容更改并保存在templ.xhtml中时,它加载正常。

怎么做,JSF 在 Tomcat 启动时立即加载条件?

注意:
尝试使用以下替代方法:
1.

<!--[if lt IE 8]>
                <h:outputStylesheet name="styleie8.css" library="css"/>
<![endif]-->

阿拉伯数字。

<o:conditionalComment if="lte IE 8">
            <link rel="stylesheet" href="styleie8.css" />
</o:conditionalComment>

3.#{request.contextPath}/resources而不是简单的路径。
结果是一样的 - 我需要重新保存.xhtml模板才能加载条件 css。

您的初始代码片段是错误的。您无法在<h:outputText escape="false">中打印<h:outputStylesheet><h:outputStylesheet>是一个JSF组件,它应该生成HTML,但在<h:outputText escape="false">中,它将按原样打印。如果您在浏览器中打开页面并右键单击,查看源代码,那么您应该自己发现了这一点。这是不对的。网络浏览器只能理解应该<link rel="stylesheet">的 HTML。

如果您已将样式表放在 /resources/css/styleie8.css 中,那么以下内容应该可以工作:

<h:outputText value="&lt;!--[if lte IE 8]&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;#{request.contextPath}/resources/css/styleie8.css&quot; /&gt;&lt;![endif]--&gt;" escape="false" />

至于你尝试的替代方案,1)不会起作用,因为它会被转义。2) 假设href指向正确的 URL,应该可以工作。在您发布的示例中,它假定 CSS 文件与视图位于同一文件夹中。但是,如果它仍然位于 /resources/css/styleie8.css ,那么您应该使用:

<o:conditionalComment if="lte IE 8">
    <link rel="stylesheet" href="#{request.contextPath}/resources/css/styleie8.css" />
</o:conditionalComment>

3) 应该可以工作,假设您提供了正确的 URL。

以下行将只输出您的字符串:

<h:outputText value="&lt;!--[if lt IE 8]&gt;&lt;h:outputStylesheet library=&quot;css&quot; name=&quot;styleie8.css&quot; /&gt;&lt;![endif]--&gt;" escape="false" />

h:outputStylesheet也只是输出,而不是作为组件处理。像这样h:outputStylesheet用作组件:

<h:outputText value="&lt;!--[if lt IE 8]&gt;" escape="false" />
<h:outputStylesheet library="css" name="styleie8.css" />
<h:outputText value="&lt;![endif]--&gt;" escape="false" />

我认为你与你的第二种选择很接近。由于缺少上下文路径,您可能遇到了 404 错误。

最新更新