Aem 如何使用根路径获取所有子级、子级页面的url?

Aem 如何使用根路径获取所有子级、子级页面的url?,aem,Aem,我有一个根页面的路径,我想检索根页面的所有子页面和根页面的孙子孙女。我的结构是这样的 rootPage | | |---------childPage | | |---------grandChildPage |

我有一个根页面的路径,我想检索根页面的所有子页面和根页面的孙子孙女。我的结构是这样的

rootPage
    |
    |
    |---------childPage
                    |
                    |
                    |---------grandChildPage
                                    |
                                    |
                                    |
                                    |----------------------grandGrandChildPages
所以我想要所有这些页面的路径。我怎么能得到这个? 目前我正在使用这个

adminSession = repository.loginAdministrative( repository.getDefaultWorkspace());
                   ResourceResolver resourceResolver = request.getResourceResolver();
                   PageManager pageManager = resourceResolver.adaptTo(PageManager.class);
                   List<String>pageList = new ArrayList();
                    Page rootPage = pageManager.getPage("/content/abc/roi");
                    Iterator<Page> rootPageIterator = rootPage.listChildren();
                    while(rootPageIterator.hasNext())
                    {
                    Page childPage =    rootPageIterator.next();
                    String path = childPage.getPath();
                    pageList.add(path);     
                    }
adminSession=repository.loginAdministrative(repository.getDefaultWorkspace());
ResourceResolver ResourceResolver=request.getResourceResolver();
PageManager PageManager=resourceResolver.adapto(PageManager.class);
ListpageList=新建ArrayList();
Page rootPage=pageManager.getPage(“/content/abc/roi”);
迭代器rootPageIterator=rootPage.listChildren();
while(rootPageIterator.hasNext())
{
Page childPage=rootPageIterator.next();
字符串路径=childPage.getPath();
pageList.add(路径);
}
但是它为我提供了根页面的唯一子页面,如果我使用rootPage.hasChild(),那么我必须传递字符串,我不能传递,因为我现在不知道页面的名称。无论一个页面是否有子页面,都有返回布尔值的方法。我只想要根页面内所有页面的列表,其中包括根页面的孙子和孙子


有人能帮忙吗

从AEM 5.6开始,您可以使用
com.day.cq.wcm.api.Page
界面中提供的方法

这将接受一个和一个布尔值作为参数

如果要过滤无效和隐藏的页面,可以使用PageFilter。如果要列出所有页面,请为此参数传递
null

对于布尔深度,if
false
只列出子页面,if
true
将列出给定页面的所有子页面

因此,问题中的代码可以修改为

Iterator<Page> rootPageIterator = rootPage.listChildren(null, true);
Iterator rootPageIterator=rootPage.listChildren(null,true);
或作为

Iterator<Page> rootPageIterator = rootPage.listChildren(new PageFilter(), true);
Iterator rootPageIterator=rootPage.listChildren(new PageFilter(),true);

您使用的是哪一版本的AEM?从5.6开始,您可以选择指定是否要列出页面下的所有子页面。从我应该传递的过滤器中检查方法
listChildren(PageFilter filter,boolean deep)
。就像我的孙子路径是content/abc/def/ghi/jkl一样。那么在deep中是什么呢?我以前从未使用过这个过滤器界面。请您解释一下,您可以为过滤器传递a或
null
,为deep传递
true
。像这样
listChildren(new PageFilter(),true)
对我来说很好。我猜页面会被标记为hideInNav,因此过滤器可能会拒绝它。否则请尝试
listChildren(null,true)
。这个应该适合你。你能回答这个问题吗?