Как сгруппировать строки с повторяющимися свойствами столбцов в JSTL c: forEach - PullRequest
1 голос
/ 23 декабря 2010

Я программирую на Java, и у меня есть список объектов, которые я хотел бы перебрать в JSTL, чтобы проверить, имеют ли другие элементы некоторое сходство с текущим.И я хотел бы сделать это в моем jsp, потому что это просто вопрос отображения.

Давайте возьмем фиктивный пример и скажем, что у моего объекта есть три свойства: id, фамилия и имя.id будет идентификатором семейства, и я хочу отобразить список в HTML-таблице, НО при повторении своего списка я хочу проверить оставшуюся часть списка, чтобы увидеть, присутствуют ли другие члены семьи, чтобы я мог сгруппировать их в один тег td.

1 | TOTO   | James 
2 | FOE    | Cameron 
2 | FOE    | Jessica 
1 | TOTO   | Pat
3 | SAMPLE | Bob

Ожидаемый результат:

<table>
   <tr><td>1</td><td>TOTO</td><td>James, Pat</td></tr>
   <tr><td>2</td><td>FOE</td><td>Cameron, jessica</td></tr>
   <tr><td>3</td><td>SAMPLE</td><td>Bob</td></tr>
</table>

Опять же, это базовый пример, и у вас может возникнуть желание сказать мне перегруппировать мои семейства в другой объект на моем уровне модели, ноЯ бы предпочел не делать этого.


Редактировать: Я подразумеваю цикл while, потому что мой список упорядочен по id, чтобы я мог легко проверить следующие элементы.Но другие решения были бы хороши для меня.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2010

Вы можете получить обработанные фамилии в Map и перехватить их.

<table>
    <jsp:useBean id="processed" class="java.util.HashMap" />
    <c:forEach items="${persons}" var="person">
        <c:if test="${empty processed[person.lastName]}">
            <c:set target="${processed}" property="${person.lastName}" value="true" />
            <tr>
                <td>${person.familyId}</td>
                <td>${person.lastName}</td>
                <td>${person.firstName}
                    <c:forEach items="${persons}" var="other">
                        <c:if test="${person.lastName == other.lastName and person.firstName != other.firstName}">
                            , ${other.firstName}
                        </c:if>
                    </c:forEach>
                </td>
            </tr>
        </c:if>
    </c:forEach>
</table>

Однако я согласен с тем, что это следует делать на стороне модели (данных), а не на стороне вида.

0 голосов
/ 23 декабря 2010

Ваш бин должен выполнять группировку, а не JSP.

...