我有一个简单的要求:我的列数<tr:table/>
是动态的。我将有一个对象列表,someBean.features
它将确定渲染的列数。
下图应该阐明我的要求。
在给我的代码中,使用了 JSTL<c:forEach/>
标记,这在 JSF 环境中使用时显然会产生问题。他们做了这样的事情:
<tr:table value="#{someBean.values}">
<tr:column headerText="Name">
<tr:outputText value="#{someBean.name}"/>
</tr:column>
<c:forEach var="col" items="#{someBean.features}">
<tr:column headerText="Column-#{col.id}">
<tr:outputText value="#{col.name}"/>
</tr:column>
</c:forEach>
</tr:table>
但是当我分析上面的代码时,作为上面标签someBean.getValues
输入的方法<tr:table/>
被调用了数千次而不是大约 20 次。这 - 正如我所想的那样 - 是因为<c:forEach/>
标签是一个编译时标签,其中<tr:*/>
渲染时间标签也是如此。
所以,这就是我打算做的(替换<c:forEach/>
为<tr:iterator/>
:
<tr:table value="#{someBean.values}">
<tr:column headerText="Name">
<tr:outputText value="#{someBean.name}"/>
</tr:column>
<tr:iterator var="col" value="#{someBean.features}">
<tr:column headerText="Column-#{col.id}">
<tr:outputText value="#{col.name}"/>
</tr:column>
</tr:iterator>
</tr:table>
但是,出于某种原因,<tr:iterator/>
它似乎不喜欢被放置在 a 中<tr:table/>
并且它永远不会被执行。
任何解决方案、提示、指南将不胜感激。
哦,我们正在使用带有 MyFaces Trinidad 1.0.13 实现的 JSF 1.1。
谢谢。