9

プロパティHashMapを持つBean「MyBean」があります-値のタイプがMyClassである「マップ」。ui:repeat を使用して、jsf でマップのいくつかのプロパティを表示したいと考えています。しかし、これらのコード:

<ui:repeat  var="var"  value="#{mybean.map}" >
<tr> 
<td> <h:outputText value="#{var.value.property1}"></h:outputText> </td>
<td><h:outputText value="#{var.value.property2}"></h:outputText></td>
</tr>
</ui:repeat>

しかし、このコードは何も表示しませんでした。このようにjspでハッシュマップ値を表示しようとすると、成功しました。どこが間違っていますか?そして、それをどのように修正しますか?

4

2 に答える 2

26

それは確かに大きなピタです。長く<c:forEach>支持されています。MapMcDowell によって提案されているように別のゲッターを提供することとは別に、カスタム EL functionによってこれを回避することもできます。

<ui:repeat value="#{util:toList(bean.map)}" var="entry">
    #{entry.key} = #{entry.value} <br/>
</ui:repeat>

EL関数は次のようになります

public static List<Map.Entry<?, ?>> toList(Map<?, ?> map) {
    return = map != null ? new ArrayList<Map.Entry<?,?>>(map.entrySet()) : null;
}

または、すでに EL 2.2 を使用している場合 (Glassfish 3、Tomcat 7 などの Servlet 3.0 互換コンテナーによって提供されます)、単に使用Map#entrySet()してからSet#toArray().

<ui:repeat value="#{bean.map.entrySet().toArray()}" var="entry">
    #{entry.key} = #{entry.value} <br/>
</ui:repeat>
于 2011-05-14T13:55:32.613 に答える
6

value 属性のドキュメントから:repeat

このタグが繰り返される項目のコレクションの名前。コレクションは、List、配列、java.sql.ResultSetまたは個々の java の場合がありObjectます。コレクションが null の場合、このタグは何もしません。

したがって、var は your として設定され、HashMapEL はそのキーを検索しようとします"value"。エントリ セットを として公開する必要がありますList

于 2011-05-14T12:22:54.333 に答える