h:ui中的outputStylesheet:重复

时间:2015-06-08 23:17:49

标签: jsf facelets jsf-2.2 uirepeat outputstylesheet

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

<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表达式,似乎它们没有被评估,我假设因为我直接引用它们。

感谢您的任何见解。

1 个答案:

答案 0 :(得分:1)

<h:outputStylesheet>(和<h:outputScript>)需要在视图构建期间出现,以便让JSF资源管理正确地获取它们。但是,<ui:repeat>仅在视图渲染时间内运行,JSF执行重定位操作(移动到头部或主体的底部等)为时已晚。

将其替换为<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?