拥有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
中的某些内容发生变化并保存时,它已加载好了。
怎么做,当Tomcat启动时,JSF会立即加载条件?
注意:
试图使用以下替代方案:
1。
<!--[if lt IE 8]>
<h:outputStylesheet name="styleie8.css" library="css"/>
<![endif]-->
2。
<o:conditionalComment if="lte IE 8">
<link rel="stylesheet" href="styleie8.css" />
</o:conditionalComment>
3。 #{request.contextPath}/resources
而非简单路径
结果是一样的 - 我需要重新保存 .xhtml模板才能加载条件css。
答案 0 :(得分:2)
您的初始代码段错误。您无法在<h:outputStylesheet>
中打印<h:outputText escape="false">
。 <h:outputStylesheet>
是一个JSF组件,它应该生成HTML,但在<h:outputText escape="false">
中,它将按字面打印。如果您在浏览器中打开页面并右键单击查看源,那么您应该自己发现了这一点。这个不对。 webbrowser只能理解应该是<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。
答案 1 :(得分:1)
以下行只会输出您的字符串:
<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错误。