2011-05-13 61 views
2

我试图在JSF 1.1中使用JSTL。下面的代码引起了我一个问题:使用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]}"/> 

此代码是工作的罚款外H:dataTable的(迭代和显示名称),但是当我把它放在桌子里时,什么都不显示。

有没有人有线索如何解决这个问题?
是否有一个JSF标记可以遍历h中的列表:dataTable

任何帮助,将不胜感激!

+0

jsp的EL和jsf的EL不会在同一过程中被处理 – 2011-05-13 12:43:49

+0

@Jigar:实际上,它是标签而不是EL。 – BalusC 2011-05-13 12:45:39

+0

@BalusC谢谢。 – 2011-05-13 12:52:25

回答

5

JSF和JSTL不会像编码期望的那样同步运行。在查看构建时,它是JSTL,它从上到下首先运行,结果是一个没有任何JSTL标记的纯JSF组件树。然后,在视图呈现时间内,JSF从上到下再次运行以生成HTML。

如果${names}被定义为<h:dataTable>var,那么它在JSTL完成其工作时根本不可用。

您需要前往不同的解决方案(在后台bean中动态填充),或采用允许生成动态列的第三方组件库。例如RichFaces有一个专门为此设计的rich:columns组件。

+0

感谢您提出解决方案。由于我即将开始使用MyFaces Tomahawk JSF组件,因此我使用了** t:columns **来解决我的问题。再次感谢! – Igor 2011-05-13 15:37:13

+0

不客气。 – BalusC 2011-05-13 15:37:37