在facelets JSF 2中输出一个映射集合



我在SO上看到了一些其他的例子,讨论了一些奇怪的变通方法,但似乎没有一个是有效的,它们都是在JSF 2之前的版本中解决的。那么,是否有可能简单地输出映射的键呢?我尝试了ui:repeat和c:forEach,但没有成功:

<c:forEach items="${myBean.myMap.keySet}" var="var">
   <h:outputText value="#{var}"/>
</c:forEach>

从你的代码:

<c:forEach items="${myBean.myMap.keySet}" var="var">

这是行不通的。这需要Map接口上的getKeySet()方法,但是没有。

如果你的环境支持EL 2.2 (Servlet 3.0容器,如Tomcat 7, Glassfish 3等),那么你应该直接调用keySet()方法,而不是作为属性调用它:

<c:forEach items="#{myBean.myMap.keySet()}" var="key">
    <h:outputText value="#{key}"/>
</c:forEach>

或者如果你的环境还不支持EL 2.2,那么你应该直接遍历映射本身,在每次迭代中给出一个Map.Entry实例,然后有一个getKey()方法,所以这应该做得很好:

<c:forEach items="#{myBean.myMap}" var="entry">
    <h:outputText value="#{entry.key}"/>
</c:forEach>

以上都不能用于<ui:repeat>,因为它不支持MapSet。它只支持List和array。<c:forEach><ui:repeat>之间的区别在于,<c:forEach>在视图构建时生成多个JSF组件,而<ui:repeat>创建一个JSF组件,在视图呈现时多次生成HTML输出。

输出映射键的正确语法是:

<ui:repeat value="#{myBean.myMap().keySet().toArray()}" var="var">
   <h:outputText value="#{var}"/><br/>
</ui:repeat>

相关内容

  • 没有找到相关文章

最新更新