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