有 xhtml templ.xhtml
布局。
将其包含在其他.xhtml中,例如:
<ui:composition template="/template/templ.xhtml">
在 templ 中定义条件.xhtml例如:
<h:head>
<h:outputText value="<!--[if lt IE 8]><h:outputStylesheet library="css" name="styleie8.css" /><![endif]-->" 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="<!--[if lte IE 8]><link rel="stylesheet" href="#{request.contextPath}/resources/css/styleie8.css" /><![endif]-->" 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="<!--[if lt IE 8]><h:outputStylesheet library="css" name="styleie8.css" /><![endif]-->" escape="false" />
h:outputStylesheet
也只是输出,而不是作为组件处理。像这样h:outputStylesheet
用作组件:
<h:outputText value="<!--[if lt IE 8]>" escape="false" />
<h:outputStylesheet library="css" name="styleie8.css" />
<h:outputText value="<![endif]-->" escape="false" />
我认为你与你的第二种选择很接近。由于缺少上下文路径,您可能遇到了 404 错误。