Jsf 2 如何迭代映射<;字符串、集合>;在primefaces中的datatable中
将JSF2.1与primefaces一起使用Jsf 2 如何迭代映射<;字符串、集合>;在primefaces中的datatable中,jsf-2,collections,primefaces,datatable,loops,Jsf 2,Collections,Primefaces,Datatable,Loops,将JSF2.1与primefaces一起使用 class FOO{ String name; String value; public void setName(String name){ this.name=name; } public String getName(){ return this.name; } public void setValue(String value){ this.value=value; } public String getValue(){ return thi
class FOO{
String name;
String value;
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public void setValue(String value){
this.value=value;
}
public String getValue(){
return this.value;
}
}
我有一张地图
标题名称应该是映射的键。我需要创建多个列(即映射的大小),并且每列都应该有FOO列表,以便在行中显示FOO.Name
例如:
如果地图的大小是4
Coulmns------键1
第1列的行-列表
与键1相对
Coulmns------键2
第1列的行-列表
与键2相对
Coulmns------键3
第1列的行-列表
与键3相对
Coulmns------键4
第1列的行-列表
与键4相对
有人能告诉我在xhtml页面中显示这种类型的输出要使用什么组件吗?我尝试过使用动态数据表创建,但无法显示这一点。如果不使用技巧,我无法找到实现这一点的方法:因为地图中每个键集的列表大小可能不同,所以您需要知道具有最大项集的列表的大小。通过知道你可以想出这个奇怪的解决方案:想法是在for循环中有一个for循环
private-Map-fooMap=Maps.newHashMap();
私人名单最高的食品数量;
私有init()
{
highestnumberofoos=Lists.newArrayList(new Foo(“a”、“b”)、new Foo(“c”、“d”)、new Foo(“e”、“f”);//我们知道,不会有任何列表的项数超过此项。
fooMap.put(“名称1”,最高的foos数);
fooMap.put(“name2”,list.newArrayList(newfoo(“g”,“h”),newfoo(“i”,“j”));
}
…并且认为:
<table>
<thead>
<tr>
<ui:repeat value="#{bean.fooMap.keySet().toArray()}" var="key">
<td>#{key}</td>
</ui:repeat>
</tr>
</thead>
<tbody>
<ui:repeat value="#{bean.highestNumberOfFoos}" var="dummyFoo" varStatus="vs">
<tr>
<ui:repeat value="#{bean.fooMap.entrySet().toArray()}" var="innerEntry">
<td>#{innerEntry.value[vs.index].name}</td>
</ui:repeat>
</tr>
</ui:repeat>
</tbody>
</table>
#{key}
#{innerEntry.value[vs.index].name}
您的数据结构有误。将其更改为正确的数据结构。最简单的方法是在表示行
属性的列表中收集数据。Map
表示列,由列名键入。在单独的列表中收集这些列名,该列表表示列
属性。最后通过
将其显示如下:
#{行[列]}
下面是如何将奇怪的数据结构转换为正确的数据结构,如果需要(并且假设每个列表的大小相同;否则整个数据结构就没有意义了):
映射错误数据结构=createItSomehow();
List columns=new ArrayList(错误的datastructure.keySet());//注:我希望LinkedHashMap在这里订购。
列表行=新建ArrayList();
int size=ErrorDatastructure.values().iterator().next().size();
对于(int i=0;i
感谢您的澄清。然而,我想知道如何使用这种设置区分普通行和标题行。提前谢谢。
Map<String, List<FOO>> wrongDataStructure = createItSomehow();
List<String> columns = new ArrayList<String>(wrongDataStructure.keySet()); // Note I expect LinkedHashMap ordering here.
List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();
int size = wrongDataStructure.values().iterator().next().size();
for (int i = 0; i < size; i++) {
Map<String, Object> row = new HashMap<String, Object>();
for (String column : columns) {
row.put(column, wrongDataStructure.get(column).get(i).getName());
}
rows.add(row);
}
// Now use "columns" and "rows".