gpt4 book ai didi

jsf - 动态生成h :column based on list of hashmaps

转载 作者:行者123 更新时间:2023-12-05 01:18:09 24 4
gpt4 key购买 nike

在我的应用程序中,我想显示 <h:dataTable>具有托管 bean 属性。目前这个表是从 List<Folder> 创建的。 .现在我想更改 Folder到更动态的东西。那是因为我不想更改 Folder如果我决定稍后添加另一个字段,请上课。我只需要在 Map<String, Object> 中添加另一个条目而不是在 Folder 中引入新字段.

那么,是否可以绑定(bind) List<Map<String, Object>><h:dataTable> ?

最佳答案

Is it possible to bind a List of HashMaps to the jsf component h:dataTable?



这只有在您生成必要的 <h:column> 时才有可能。带有 View 构建时间标签的标签,例如 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>

(如果您的环境不支持 EL 2.2,您需要提供另一个 getter,它将映射键集返回为 String[]List<String>;还要记住 HashMap 本质上是无序的,您可能想要使用 LinkedHashMap 来维护插入顺序)

当您使用早于 2.1.18 的 Mojarra 版本时,缺点是 #{bean}必须是请求范围的(不是 View 范围的)。或者至少, <c:forEach items>应该引用一个请求范围的bean。否则将在每个 HTTP 请求上重新创建 View 范围的 bean,如 <c:forEach>在 View 构建期间运行,此时 View 范围尚不可用。如果您绝对需要 <h:dataTable> 的 View 范围 bean ,那么您始终可以专门为 <c:forEach items> 创建一个单独的请求范围 bean .解决方案是升级到 Mojarra 2.1.18 或更高版本。有关一些背景信息,另请参阅 JSTL in JSF2 Facelets... makes sense?

JSF 组件库,例如 PrimeFaces可提供 <x:columns>使这更容易的标签,例如 <p:dataTable> with <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>

关于jsf - 动态生成h :column based on list of hashmaps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13176842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com