jsf使用集合/地图

时间:2012-06-12 13:11:44

标签: jsf richdatatable

我可以将我的h:dataTable / rich:dataTable与某些Map绑定吗?我发现h:dataTable只能用于List对象,而List中的删除可能非常繁重。

2 个答案:

答案 0 :(得分:6)

是的,没错。 dataTable,ui:repeat和friends只能使用Lists。

您可以添加一个托管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之类的东西来保留排序,这就是最有意义的。

答案 1 :(得分:6)

如果你想在你的支持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)。