【问题标题】:Managing order of resource loading in JSF在 JSF 中管理资源加载的顺序
【发布时间】:2014-05-16 23:04:12
【问题描述】:

我无法正确指定 JSF 中资源加载的顺序,尤其是在使用 primefaces 时。我有许多需要包含的样式表,所有这些都应该在 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 一起被跳过- 特定的样式表。所以,这里也没有解决办法。

我很好奇你们中是否有人设法解决了这个问题。我已经完成了 primefaces 的 HeadRenderer 实现,但我无法找到一种简单的方法来让它工作(尤其是在 css 文件的顺序需要保持不变的情况下)。

【问题讨论】:

    标签: css jsf jsf-2 primefaces


    【解决方案1】:

    试试地方
    <h:outputStylesheet library="mw.static" name="css/prime.css"/> <h:outputStylesheet library="mw.static" name="css/main.css"/>&lt;h:head&gt; 标签内,如果您没有此标签,只需将其替换为&lt;head&gt;

    还有另一种方法可以让你的 css 工作,但需要一项繁琐的工作。
    您需要在每个属性后加上 '!important'。

    【讨论】:

    • 不建议在JSF中按h:head的顺序使用headstackoverflow.com/a/6044008/1199132
    • 嗯,我不知道另一种包含 css 文件的方法,它将是在 html 中添加的最后一个没有 'h:head' 的文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多