Создайте динамическую таблицу из java.util.Map - PullRequest
2 голосов
/ 20 октября 2011

Я занимаюсь разработкой веб-приложения на JSF 2.0.В моем приложении мне нужна таблица для просмотра присутствия.

У меня есть Map<Date, List<Presence>> в моем компоненте PresenceService.

У объекта Presence есть объект Person (с именем и фамилией) илогический подарок / нет.

Я хотел бы создать таблицу, которая выглядит следующим образом:

                 monday     tuesday        wednesday    ...
Name Person 1    present    not present    present      ...
Name Person 2    present    present        present      ...
...              ...        ...            ...          ...

Какие компоненты JSF можно использовать для создания такой таблицы?Или я не должен использовать карту для этого?Я сам пытался создать таблицу с <ui:repeat>, но не смог.Как столбцы, так и строки могут быть динамическими, поскольку пользователь может выбрать период и диапазон лиц.

РЕДАКТИРОВАТЬ: решение (см. Ответ Балус 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 Ответ

3 голосов
/ 20 октября 2011

Двойное вложенное <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 и Map<Date, Boolean>, чтобы можно было выбрать конкретную дату длястолбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...