我正在使用JSF 2.0开发Web应用程序。在我的应用程序中,我需要一个用于查看状态的表。
我的'PresenceService'bean中有一个Map<Date, List<Presence>>
。
Presence对象有一个Person对象(带名字和姓氏)和一个布尔存在/不存在。
我想创建一个如下所示的表:
monday tuesday wednesday ...
Name Person 1 present not present present ...
Name Person 2 present present present ...
... ... ... ... ...
我可以使用哪些JSF组件来创建这样的表?或者我不应该使用地图吗?我尝试用<ui:repeat>
创建一个表,但没有这样做。
因为行可以是动态的,因为用户可以选择一个时段和一系列人。
编辑:解决方案(参见答案Balus C)
这就像一个魅力:
<table>
<tr>
<th>Name</th>
<ui:repeat value="#{aanwezigheidController.siAanwezigheidService.datums}" var="datumHeader">
<th>
<h:outputText value="#{datumHeader}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</th>
</ui:repeat>
</tr>
<ui:repeat value="#{aanwezigheidController.siAanwezigheidService.aanwezigheidSiRijen}" var="aanwRij">
<tr>
<td>#{aanwRij.persoon.naam} #{aanwRij.persoon.voornaam}</td>
<ui:repeat value="#{aanwezigheidController.siAanwezigheidService.datums}" var="datumCell">
<td>
<h:outputText value="aanwezig" rendered="#{aanwRij.aanwezighedenMap[datumCell].aanwezig}" />
<h:outputText value="afwezig" rendered="#{!aanwRij.aanwezighedenMap[datumCell].aanwezig}" />
</td>
</ui:repeat>
</tr>
</ui:repeat>
</table>
答案 0 :(得分:3)
双嵌套<ui:repeat>
应该没问题。标准JSF实现不提供<h:columns>
来表示动态列,但组件库RichFaces和PrimeFaces分别具有<rich:columns>
和<p:columns>
用于此目的。你可能想看看它。
单独使用Map<Date, List<Presence>>
时,无法选择特定人员来显示所有列的行数据。您基本上需要一个Map<Date, Map<Person, List<Presence>>
,或一个单独的List<Date>
代表动态列,另一个List<Presence>
,其中Presence
依次为Person
和{{1} }属性,以便可以为列选择特定日期。