从java.util.Map创建动态表

时间:2011-10-20 10:38:02

标签: jsf jsf-2

我正在使用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>

1 个答案:

答案 0 :(得分:3)

双嵌套<ui:repeat>应该没问题。标准JSF实现不提供<h:columns>来表示动态列,但组件库RichFacesPrimeFaces分别具有<rich:columns><p:columns>用于此目的。你可能想看看它。

单独使用Map<Date, List<Presence>>时,无法选择特定人员来显示所有列的行数据。您基本上需要一个Map<Date, Map<Person, List<Presence>>,或一个单独的List<Date>代表动态列,另一个List<Presence>,其中Presence依次为Person和{{1} }属性,以便可以为列选择特定日期。

相关问题