在 JSF 1.1 中使用 JSTL

Posted

技术标签:

【中文标题】在 JSF 1.1 中使用 JSTL【英文标题】:Using JSTL with JSF 1.1 【发布时间】:2011-08-24 22:02:53 【问题描述】:

我正在尝试将 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>

其中 names 是一个 String 列表。名称是包含在表中显示的数据中的地图的键,即我正在尝试完成这样的事情:

<h:outputText value="#data.fooMap[key]"/>

这段代码在 h:dataTable (名称的迭代和显示)之外运行良好,但是当我将它放在表中时,什么都没有显示。

有人知道如何解决这个问题吗? 是否有一个 JSF 标记可以遍历 h:dataTable 内的列表?

任何帮助将不胜感激!

【问题讨论】:

jsp的EL和jsf的EL不会同时处理 @Jigar:其实是标签,不是EL。 【参考方案1】:

JSF 和 JSTL 不会像您对编码所期望的那样同步运行。在视图构建期间,JSTL 首先从上到下运行,结果是一个没有任何 JSTL 标记的纯 JSF 组件树。然后,在视图渲染期间,JSF 再次从上到下运行以生成 html

如果$names 被定义为varvar,那么它在JSTL 工作时根本不可用。

您需要采用不同的解决方案(在支持 bean 中动态填充),或者采用允许生成动态列的第 3 方组件库。例如,RichFaces 有一个 rich:columns 组件,正是为此目的而设计的。

【讨论】:

感谢您提出解决方案。由于我即将开始使用 MyFaces Tomahawk JSF 组件,因此我使用了 t:columns 解决了我的问题。再次感谢!

以上是关于在 JSF 1.1 中使用 JSTL的主要内容,如果未能解决你的问题,请参考以下文章

当 JSF 2 的视图中存在元数据转换器时,为啥 JSTL-JSF2 不能正常工作

JSF 1.2 和 JSF 2.x 之间的 JSTL xmlns 命名空间差异?

JSF/Facelets/JSTL 条件显示最佳实践

JSTL c:forEach 在 JSF h:dataTable 中不起作用

将带有 Ajax4jsf 1.x 的 JSF 1.1 迁移到 JSF 2

使用 JSTL <c:forEach> 标签遍历 List 和 Map 的元素