在primefaces数据表中迭代List <Map <String,String >>?

Zim*_*Zim 2 datatable jsf loops map primefaces

我试图通过地图项目的列表进行迭代,即包含HashMap或类似的东西的一个ArrayList,我试图做到这一点在primefaces数据表.这基本上就是我要做的事情:

<body>
    <h:form>
        <p:dataTable value="#{customerBean.list}" var="map">
            <c:forEach items="#{map}" var="entry">
                <p:column headerText="#{entry.key}">
                    #{entry.value}
                </p:column>
            </c:forEach>
        </p:dataTable>
    </h:form>
</body>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,customerBean.listList<Map<String, String>>和条目是一个Map<String, String>.

我想要做的,是营造列的动态量的基础上,在条目数量Map<String, String>使用的标题名称映射条目的键的同时,和值作为输出.c:forEach当我使用硬编码时Map<String, String>,这个东西似乎工作正常,但显然它无法循环通过变量p:dataTable.我假设该程序采取预防措施,以避免必须循环不同大小的地图.那么我怎么能做这项工作呢?如何根据Map中的条目数创建任意数量的列?请注意,我100%肯定每个人Map<String, String>的身材都相同List<Map<String, String>>

编辑:

这是我的豆源.代码工作正常,一切,问题只是循环不愿意通过我的地图:

@ManagedBean
@SessionScoped
public class CustomerBean {

    private List<Map<String, String>> list = new ArrayList<Map<String, String>>();
    private Mapper mapper = new Mapper();

    public CustomerBean() {
        list = mapper.all(); //gets data from database
    }

    public List<Map<String, String>> getList() { 
        return list;
    }

    public void setList(List<Map<String, String>> list) { 
        this.list = list;
    } 
}
Run Code Online (Sandbox Code Playgroud)

sku*_*sel 5

该问题与Map此上下文中的用法无关.问题是,您正在尝试获取在呈现视图时可用的#{map}变量,但是您在构建视图时依赖于其值.后者是在较早的生命周期阶段执行的,因此当您需要它时它基本上不可用.

仍然,标记处理程序或视图构建标记等<c:forEach>是填充可变数量列的唯一方法,正如<p:column>构建组件树时所评估的那样.

值得注意的另一件事是绑定到<c:forEach>标签属性的辅助bean ,例如items,必须是除了视图作用域之外的任何东西,比如请求作用域,否则它将在每次请求时重新创建,这会带来意外/不需要的结果,因为所需的bean不是当你试图访问其属性时.还有一些其他设置星座解决了这个问题,但它们不是这里讨论的主题.

<p:dataTable value="#{customerBean.list}" var="map">
    <c:forEach items="#{forEachBean.columnsMap}" var="entry">
        <p:column headerText="#{entry.key}">
            #{map[entry.key]}
        </p:column>
    </c:forEach>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)

另外值得注意的是,有一个辅助<p:columns>组件大致相同.