JSP / Struts2 / Hibernate: цикл по самоссылающейся таблице - PullRequest
1 голос
/ 07 января 2011

Допустим, у нас есть таблица с самоссылкой PERSON со следующими столбцами: ID, PARENT, где PARENT - это внешний ключ столбца ID другого элемента в таблице PERSON. Конечно, у многих людей может быть один и тот же родитель.

Я использую Hibernate 3 в режиме отложенного извлечения для работы с базой данных. Hibernate извлекает элемент person из базы данных, который затем помещается в ValueStack действием Struts2 для использования на странице результатов JSP.

Теперь возникает вопрос: как в JSP отобразить весь дочерний элемент (и дочерний элемент ребенка и т. Д., Как семейное древо) этого элемента person ?

Конечно, для детей n + 1 я могу использовать тег поверх person.person. Я также могу вложить другой тег поверх person.person.person, чтобы получить n + 2 детей.

Но что, если я хочу сделать это в автоматическом режиме, вплоть до последнего n + p дочернего элемента, отображая при этом все дочерние элементы всех элементов n + 1..n + p?

Надеюсь, я был достаточно ясен. Спасибо всем за ваше время.

- TBW.

1 Ответ

0 голосов
/ 08 января 2011

Вы можете сделать это довольно легко с помощью JSTL и файла пользовательских тегов.Идея заключается в том, что тег является рекурсивным.Обратите внимание, что в некоторых ранних версиях WebLogic 11g была ошибка, которая мешала правильной работе рекурсивных тегов, но в целом это хорошо поддерживается контейнерами сервлетов и серверами приложений.*

<%@attribute name="value" required="true" type="com.example.Person"%>

<c:forEach items="${value.children}" var="child">
    display child info...
    <z:person value="${child}"/>
</c:forEach>

(я только что написал пример из памяти, возможно, понадобятся некоторые небольшие изменения)

Поскольку вы загружаетесь лениво, вы, вероятно, захотите использовать Open Sessionв представлении , как упоминалось в кватернионе (пружина не требуется).

...