Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 如何迭代映射<;字符串、集合>;在primefaces中的datatable中_Jsf 2_Collections_Primefaces_Datatable_Loops - Fatal编程技术网

Jsf 2 如何迭代映射<;字符串、集合>;在primefaces中的datatable中

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

将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 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".