引用datatable的p:列不迭代Map [英] Primefaces datatable's p:columns not iterating over Map

查看:151
本文介绍了引用datatable的p:列不迭代Map的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用两个级别的地图 Map< String,HashMap< String,String>> ,我需要使用 p:dataTable> 。管理bean的代码如下:

I am having a two level map Map<String,HashMap<String,String>> which i need to display using a <p:dataTable>. The code of managed bean is as follows:

@ManagedBean(name="MyBean")
public class MyBean{
    private Map<String,HashMap<String,String>> twoDimentionalMap;
    public void getMapData(){
       twoDimentionalMap=getDataFromDataStore();
    }

}

现在我使用这个地图我的 view.xhtml 文件如下:

Now I am using this map in my view.xhtml file as follows:

<p:dataTable var="entrySet1" value="#{MyBean.twoDimentionalMap.entrySet()}">
    <p:columns var="entrySet2" value="#{entrySet1.getValue()}">
         #{entrySet2.getKey()} - #{entrySet2.getValue()}
    </p:columns>
</p:dataTable>

我也尝试使用

<p:dataTable var="entrySet1" value="#{MyBean.twoDimentionalMap.entrySet()}">
    <p:columns var="entrySet2" value="#{MyBean.twoDimentionalMap.get(entrySet1.getKey()).getValue()}">
         #{entrySet2.getKey()} - #{entrySet2.getValue()}
    </p:columns>
</p:dataTable>

我甚至尝试将外部地图转换为列表:

I even tried converting the outer map to a list:

List<HashMap<String,String>> twoDimentionalMap;

但是datatable上没有显示任何内容。执行没有显示错误,但页面上没有任何显示。

However nothing is displayed on datatable. The execution shows no error but there is nothing displayed on the page.

请注意,如果我做错了,或者如果< p:columns> ; 正在处理地图的任何问题。

Kindly suggest if I am doing something wrong or if <p:columns> is having any issue handling maps.

谢谢

推荐答案

由于外贴图的键不具有意义,将外部地图转换为列表是正确的。

since the keys of outer map do not have a meaning, converting the outer map to a list is correct.

但是您检索列名称的方法从xhtml看来似乎无效。您需要从当前的迭代变量 entrySet1 中独立获取它们,否则您将向操作添加第三维,该数据表无法处理。

but your approach to retrieve column names from xhtml does not seem valid. you need to get them independently from the current iteration variable entrySet1, otherwise you add a third dimension to the operation, which data table cannot handle.

我们需要假设所有的关键字在列出的地图中是相同的。

we need to assume that all keys are same across the listed maps.

这里是xhtml的代码:

here is the code for xhtml:

<p:dataTable var="entrySet1" value="#{testMB.twoDimensionalMap}">
    <p:columns var="keySet2" value="#{testMB.columnNames}">
         #{keySet2} - #{entrySet1[keySet2]}
    </p:columns>
</p:dataTable>

和bean:

@Named
@ViewScoped
public class TestMB implements Serializable {

    private List<HashMap<String,String>> twoDimensionalMap;

    public TestMB()
    {
        getMapData();
    }

    private void getMapData(){
        //twoDimentionalMap=getDataFromDataStore();
        twoDimensionalMap = new ArrayList<HashMap<String,String>>();
        twoDimensionalMap.add(new HashMap<String,String>());
        twoDimensionalMap.get(0).put("key0", "value00");
        twoDimensionalMap.get(0).put("key1", "value01");
        twoDimensionalMap.add(new HashMap<String,String>());
        twoDimensionalMap.get(1).put("key0", "value10");
        twoDimensionalMap.get(1).put("key1", "value11");
    }

    public Set<String> getColumnNames()
    {
        return twoDimensionalMap.size() > 0 ? twoDimensionalMap.get(0).keySet() : new HashSet<String>();
    }

    public List<HashMap<String, String>> getTwoDimensionalMap() {
        return twoDimensionalMap;
    }
}

这篇关于引用datatable的p:列不迭代Map的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆