h:outputStylesheet 里面 ui:repeat

h:outputStylesheet inside ui:repeat

我正在尝试为 ArrayList 的每个元素输出样式表 link。此代码不产生任何结果:

<ui:repeat value="#{includer.css}" var="ss">
  <h:outputStylesheet name="#{ss}" library="css" />
</ui:repeat> 

但是,如果我将 ArrayList 中的字符串更改为完整路径并将 h:outputStylesheet 替换为纯 html,例如:

<ui:repeat value="#{includer.css}" var="ss">
  <link type="text/css" rel="stylesheet" href="${ss}" />
</ui:repeat> 

然后它按预期工作。这个问题是我在一些 css 文件中有一些 EL 表达式,而且它们似乎没有被评估,我假设是因为我像那样直接引用它们。

感谢您的任何见解。

<h:outputStylesheet>(和 <h:outputScript>)需要在视图构建期间存在,以便让 JSF 资源管理正确拾取它们。然而,<ui:repeat> 仅在视图渲染期间运行,JSF 执行重定位操作(移动到头部底部或 body 等)为时已晚。

替换为<c:forEach>

<c:forEach items="#{includer.css}" var="ss">
    <h:outputStylesheet name="#{ss}" library="css" />
</c:forEach> 

另请参阅:


与具体问题无关,库名css是错误的。仔细阅读What is the JSF resource library for and how should it be used?