管理JSF中的资源加载顺序

时间:2014-04-04 14:52:10

标签: css jsf jsf-2 primefaces

我无法在JSF中正确指定资源加载的顺序,特别是在使用primeface时。我需要包含许多样式表,所有样式表都应该在primefaces资源之后加载。

我有这个:

<h:outputStylesheet library="mw.static" name="css/prime.css"/>
<h:outputStylesheet library="mw.static" name="css/main.css"/>

HTML中的结果如下:

<link href="/static/css/prime.css?rv=1396621461" rel="stylesheet" type="text/css"></link>
<link href="/static/css/main.css?rv=1396621461" rel="stylesheet" type="text/css"></link>
<link href="/javax.faces.resource/primefaces.css.xhtml?ln=primefaces&rv=1396621461" rel="stylesheet" type="text/css"></link>
<script src="/javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces&rv=1396621461" type="text/javascript"></script>
<script src="/javax.faces.resource/primefaces.js.xhtml?ln=primefaces&rv=1396621461" type="text/javascript"></script>
<script src="/javax.faces.resource/jquery/jquery-plugins.js.xhtml?ln=primefaces&rv=1396621461" type="text/javascript"></script>
<link href="/javax.faces.resource/charts/charts.css.xhtml?ln=primefaces&rv=1396621461" rel="stylesheet" type="text/css"></link>
<script src="/javax.faces.resource/charts/charts.js.xhtml?ln=primefaces&rv=1396621461" type="text/javascript"></script>

很明显,我自己的样式表的顺序是受到尊重的,因为prime.css包含在main.css之前。但是,我需要在primefaces css文件之后。

通常,最好是HeadRendered首先编写primefaces css文件,然后是我的css文件,然后是primefaces js,然后是我的附加脚本。这符合google的pagespeed建议并修复了我的css依赖问题。

这里显而易见的事情是使用facet last方法,将其放入体内:

<f:facet name="last">
<h:outputStylesheet library="mw.static" name="css/prime.css"/>
<h:outputStylesheet library="mw.static" name="css/main.css"/>
<!--[if lte IE 8]>
<link rel="stylesheet"  href="${path.styleSheet}-ie.css" type="text/css" />
<![endif]-->
<ui:insert name="css"/>
</f:facet>

然而,虽然prime.css和main.css确实现在位于primefaces资源的后面,但我的ui:insert标签(插入一些我必须放在页面中的css)现在被跳过,以及ie - 特定的样式表。所以,这里也没有解决方案。

我很好奇你是否有人设法解决这个问题。我已经完成了HeadRenderer的primefaces实现,但我无法找到一种直接的方法来实现这一点(特别是因为css文件的顺序需要保持不变)。

1 个答案:

答案 0 :(得分:0)

尝试放置
    <h:outputStylesheet library="mw.static" name="css/prime.css"/> <h:outputStylesheet library="mw.static" name="css/main.css"/><h:head>标记内,如果您没有此标记,请将其替换为<head>

还有另一种让你的CSS工作的方法,但需要繁琐的工作。 你需要把重要的事情放在一起。在每个财产之后。