是否可以将HashMaps列表绑定到jsf组件h:dataTable?
只有在<h:column>
使用视图构建时标记(如JSTL)生成必要的标记时,才有可能<c:forEach>
.
这是一个具体的启动示例,假设您的环境支持EL 2.2:
<h:dataTable value="#{bean.listOfMaps}" var="map">
<c:forEach items="#{bean.listOfMaps[0].keySet().toArray()}" var="key">
<h:column>
#{map[key]}
</h:column>
</c:forEach>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)
(如果你的环境不支持EL 2.2,你需要提供另一个getter,它将map键设置为a String[]
或者List<String>
;同时请记住a HashMap
本质上是无序的,你可能想要使用它LinkedHashMap
来维护插入顺序)
当您使用早于2.1.18的Mojarra版本时,缺点是#{bean}
必须是请求范围(不是视图范围).或者至少,<c:forEach items>
应该引用请求范围的bean.<c:forEach>
当视图范围不可用时,视图范围内的bean将在视图构建时运行时在每个HTTP请求上重新创建.如果你绝对需要一个视图范围的bean <h:dataTable>
,那么你总是可以专门为它创建一个单独的请求范围的bean <c:forEach items>
.解决方案是升级到Mojarra 2.1.18或更新版本.有关一些背景信息,请参阅JSF2 Facelets中的JSTL ......有意义吗?
JSF组件库如PrimeFaces可以提供一个<x:columns>
标签,这使得这更容易,如<p:dataTable>
用<p:columns>
.
<p:dataTable value="#{bean.listOfMaps}" var="map">
<p:columns value="#{bean.listOfMaps[0].keySet().toArray()}" var="key">
#{map[key]}
</p:columns>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9228 次 |
最近记录: |