【问题标题】:h:outputStylesheet inside ui:repeath:outputStylesheet 里面的 ui:repeat
【发布时间】:2015-06-08 23:17:48
【问题描述】:

我正在尝试使用为 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 表达式,似乎它们没有被评估,我假设是因为我像这样直接引用它们。

感谢您的任何见解。

【问题讨论】:

  • 无论您如何生成 HTML,样式表中的 EL 表达式都不会被计算。样式表由浏览器直接加载,无需经过任何会评估 EL 的操作。
  • @EJP:实际上,它们会存在,但只有在通过 &lt;h:outputStylesheet&gt; 加载时才会出现(并且您在将 EL 表达式添加到已加载的样式表后重新启动了 webapp;这就是在应用程序范围内记住的以每个样式表为基础)。
  • @BalusC 怎么样?什么时候生成 HTML 链接元素?
  • @EJP:主要是为了在 URL 选择器中支持 #{resource},例如背景图像和字体。另见 a.o. stackoverflow.com/questions/6925733/…

标签: jsf facelets jsf-2.2 uirepeat outputstylesheet


【解决方案1】:

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

将其替换为&lt;c:forEach&gt;

<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?

【讨论】:

  • 谢谢您,先生。对资源库的阅读也非常有趣。
猜你喜欢
  • 2012-05-22
  • 2012-01-02
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多