【问题标题】:Create a dynamic table from a java.util.Map从 java.util.Map 创建动态表
【发布时间】:2011-10-20 10:38:01
【问题描述】:

我正在用 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>'s 自己创建一个表,但没有这样做。 由于用户可以选择时间段和人员范围,因此列和行可以是动态的。

编辑:解决方案(见答案 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>

【问题讨论】:

    标签: jsf jsf-2


    【解决方案1】:

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

    单独使用Map&lt;Date, List&lt;Presence&gt;&gt;,不可能选择一个特定的人来呈现所有列的行数据。您基本上需要一个Map&lt;Date, Map&lt;Person, List&lt;Presence&gt;&gt;,或者一个单独的List&lt;Date&gt; 代表动态列和一个单独的List&lt;Presence&gt;,其中Presence 又具有PersonMap&lt;Date, Boolean&gt; 属性,以便可以为列。

    【讨论】:

    • 我想我会选择第二个选项。当我准备好时,我会告诉你的。非常感谢,我真的被卡住了。
    猜你喜欢
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2021-07-24
    相关资源
    最近更新 更多