【问题标题】:Output a map collection in facelets JSF 2在 facelets JSF 2 中输出地图集合
【发布时间】:2011-11-17 04:37:28
【问题描述】:

我在 SO 上看到了一些其他示例,讨论了一些奇怪的解决方法,但似乎没有一个有效,并且它们都在 JSF 2 之前的版本中得到解决。那么,可以简单地输出地图的键吗?我试过 ui:repeat 和 c:forEach 如下所示,但没有成功:

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

【问题讨论】:

  • 我想通了。我会在 8 小时后发帖。

标签: jsf map jsf-2 facelets uirepeat


【解决方案1】:

来自您的代码:

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

这是行不通的。这需要the Map interface 上的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 instance,而这又是一个 getKey() method,所以这也应该这样做:

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

以上都不适用于&lt;ui:repeat&gt;,因为它不支持Map,也不支持Set。它仅支持List 和数组。 &lt;c:forEach&gt;&lt;ui:repeat&gt; 之间的区别在于 &lt;c:forEach&gt; 在视图构建期间生成多个 JSF 组件,而 &lt;ui:repeat&gt; 创建单个 JSF 组件,该组件在视图渲染期间多次生成其 HTML 输出。

【讨论】:

  • 我更喜欢你的回答。更多详情。我记得你!你是个答案迷。你这个摇滚人!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-06-15
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2010-09-23
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多