在即将推出的 JSF 2.3 之前,UIData
组件如<h:dataTable>
, <p:dataTable>
等以及<ui:repeat>
does not支持迭代aMap
。仅支持此功能<c:forEach>
.
一种方法是将映射条目转换为数组(单独entrySet()
不会像UIData
也不支持Set
直到即将推出的 JSF 2.3)。
<h:dataTable value="#{bean.map.entrySet().toArray()}" var="entry">
<h:column>#{entry.key}</h:column>
<h:column>#{entry.value}</h:column>
</h:dataTable>
另一种方法是将地图的条目集包装在一个集合中,该集合<h:dataTable>
可以迭代,例如ArrayList
.
public class Bean {
private Map<Integer, String> map;
private List<Entry<Integer, String>> entries; // +getter (no setter necessary)
@PostConstruct
public void init() {
map = new TreeMap<>();
map.put(1, "Sasi");
map.put(2, "Pushparaju");
map.put(3, "Venkat Raman");
map.put(4, "Prabhakaran");
entries = new ArrayList<>(map.entrySet());
}
// ...
}
<h:dataTable value="#{bean.entries}" var="entry">
<h:column>#{entry.key}</h:column>
<h:column>#{entry.value}</h:column>
</h:dataTable>
然而,更干净、自记录和可重用的是使用List<User>
相反,其中User
类具有必要的属性id
and name
.
public class Bean {
private List<User> users; // +getter (no setter necessary)
@PostConstruct
public void init() {
users = new ArrayList<>();
users.add(new User(1, "Sasi"));
users.add(new User(2, "Pushparaju"));
users.add(new User(3, "Venkat Raman"));
users.add(new User(4, "Prabhakaran"));
}
// ...
}
<h:dataTable value="#{bean.users}" var="user">
<h:column>#{user.id}</h:column>
<h:column>#{user.name}</h:column>
</h:dataTable>