JSF / Seam - Вложенная / Рекурсивная итерация - PullRequest
0 голосов
/ 30 июня 2010

У меня возникла ситуация, когда я хотел бы выполнить вложенные итерации для ряда параметров и отобразить результаты с помощью JSF. Как пример, подумайте о доске обсуждений. Каждый комментарий может содержать родительский комментарий и 0-н дочерние комментарии. Итак, мой корневой объект будет выглядеть примерно так:

public class MyObject {

...

public List<Comment> getComments();

...
}

И мои комментарии выглядят так:

public class Comment {

...

public Comment getParent();

...

public List<Comment> getChildComments();

...
}

У меня все мои сущности настроены с использованием JPA, и они заполняются в базе данных. Но моя дилемма заключается в том, как перебирать каждый комментарий, чтобы я мог отображать его дочерние комментарии в строке? Я знаю, что могу использовать <ui:repeat value="#{myObj}" var="comment" /> для перебора комментариев корневого уровня для объекта. Но как я тогда перебираю комментарии детей для каждого из них? И затем, как мне перебрать их дочерние комментарии. И так далее, и так далее.

Кто-нибудь когда-нибудь делал что-нибудь подобное? Я полагаю, что «вложенная итерация» действительно может рассматриваться как «рекурсивная итерация». Мысли?

1 Ответ

1 голос
/ 30 июня 2010

Для вложенных итераций фиксированного размера просто используйте:

<ui:repeat value="#{myObj}" var="comment">
    <ui:repeat value="#{comment}" var="subComment">
        <ui:repeat value="#{subComment}" var="subSubComment">
        </ui:repeat>
    </ui:repeat>
</ui:repeat>

Если вам нужна полная рекурсия, извлеките данные в некоторой древовидной структуре вашего компонента, используя любые циклы, которые вам нравятся, и используйте их только для визуализации в простой итерации. Возможно, вам понадобится свойство level для объектов, которые вы поместите в свое дерево.

...