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.list是List<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)
该问题与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>组件大致相同.
| 归档时间: |
|
| 查看次数: |
10727 次 |
| 最近记录: |