6

h:dataTable / rich:dataTableをマップにバインドできますか?h:dataTableはListオブジェクトでのみ機能し、Listでの削除は非常に重い場合があることがわかりました。

4

2 に答える 2

7

マップを提供するバッキングBeanのメソッドを1つだけにしたい場合は、次のようにすることができます。

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>

これにより、キーセットが配列に変換され、データテーブルで繰り返すことができます。「()」式を使用するには、Unified Expression Language 2(Java EE 6)が必要です。

于 2013-06-06T13:04:25.957 に答える
6

はい、そうです。dataTable、ui:repeat、およびfriendsはリストでのみ機能します。

反復する対象に応じて、map.keySet()またはmap.values()をリストに追加するマネージドBeanメソッドを追加するだけです。

通常、JSFビューからマップを反復処理する場合は、次のようにします。

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

マネージドビーンプロパティ付き

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

またはそのようなもの。

もちろん、これは、順序を保持するようTreeMapなものを使用している場合に最も理にかなっています。LinkedHashMap

于 2012-06-12T13:14:00.380 に答える