在 JSF 1.1 中使用 JSTL
•浏览 1
Using JSTL with JSF 1.1
我正在尝试将 JSTL 与 JSF 1.1 一起使用。以下代码导致我出现问题:
<c:forEach var="key" items="${names}">
<h:column>
<f:facet name="header">
<h:outputText value="#{key}"/>
</f:facet>
<h:outputText value="#{key}"/>
</h:column>
</c:forEach>
<h:outputText value="#{data.fooMap[key]}"/>
其中名称是一个字符串列表。名称是包含在表中显示的数据中的地图的键,即我正在尝试完成这样的事情:
<c:forEach var="key" items="${names}">
<h:column>
<f:facet name="header">
<h:outputText value="#{key}"/>
</f:facet>
<h:outputText value="#{key}"/>
</h:column>
</c:forEach>
<h:outputText value="#{data.fooMap[key]}"/>
这段代码在 h:dataTable(名称的迭代和显示)之外工作正常,但是当我把它放在表中时,什么都没有显示。
有没有人知道如何解决这个问题?
是否有一个 JSF 标记可以遍历 h:dataTable 中的列表?
任何帮助将不胜感激!
JSF 和 JSTL 不会像您对编码所期望的那样同步运行。在视图构建期间,它首先是从上到下运行的 JSTL,结果是一个没有任何 JSTL 标签的纯 JSF 组件树。然后,在视图渲染期间,它是 JSF,它再次从上到下运行以生成 HTML。
如果 ${names} 被定义为 <h:dataTable> 的 var,那么它在 JSTL 执行其工作时根本不可用。
您需要采用不同的解决方案(在支持 bean 中动态填充),或者采用允许生成动态列的第 3 方组件库。例如,RichFaces 有一个 rich:columns 组件,正是为此目的而设计的。