6

我可以将我的 h:dataTable/rich:dataTable 与一些 Map 绑定吗?我发现 h:dataTable 只能与 List 对象一起使用,并且在 List 中删除可能非常繁重。

4

2 回答 2

7

如果您希望在您的支持 bean 中只有一种方法提供映射,您可以执行以下操作:

class Bean {
  public Map<T,U> getMap() {
    return yourMap;
  }
}

并在您的 JSF 视图中使用它

<h:dataTable value="#{bean.map.keySet().toArray()}" var="key"> 
   <h:outputText value="#{bean.map[key]}"/> 
</h:dataTable>

这会将键集转换为数组,可以通过数据表进行迭代。使用“()”-表达式需要统一表达式语言 2 (Java EE 6)。

于 2013-06-06T13:04:25.957 回答
6

是的,这是正确的。dataTable、ui:repeat 和朋友只适用于列表。

您可以添加一个托管 bean 方法,将 map.keySet() 或 map.values() 放入列表中,具体取决于您要迭代的内容。

通常,当我想从 JSF 视图中迭代地图时,我会执行类似的操作

<h:dataTable value="#{bean.mapKeys}" var="key"> 
   <h:outputText value="#{bean.map[key]}"/> 
</h:dataTable>

具有托管 bean 属性

class Bean {
   public List<T> mapKeys() {
     return new ArrayList<T>(map.keySet());
   }
} 

或类似的东西。

当然,如果您使用类似TreeMapLinkedHashMap保留顺序的东西,这是最有意义的。

于 2012-06-12T13:14:00.380 回答