【问题标题】:Using PageManager API in AEM6/CQ5在 AEM6/CQ5 中使用 PageManager API
【发布时间】:2015-01-13 06:32:33
【问题描述】:

我的要求是在 JCR 中迭代超过 8000 个节点,并使用 PageManager API 在 Java 中为每个节点创建一个 Page 对象。

首先,我使用 PageManager 来获取页面的标题,如下所示。

public String currentPageTitle(String pagePath) {
    Page page=null;
    ResourceResolver resourceResolver=null;
    PageManager pageManager=null;
    try {
        if (pagePath != null) {
            resourceResolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
            pageManager = resourceResolver.adaptTo(PageManager.class);
            **page = pageManager.getContainingPage(resourceResolver.getResource(pagePath));**
            LOGGER.error("Page $$$$"+page);
            if (page == null) {
                throw new IllegalArgumentException("Page does not exist: " + pagePath);
            }
        }
    } catch (LoginException e) {
        LOGGER.error("Login Exception");
        e.printStackTrace();
    }
    return page.getTitle();
}

在这里,我将页面对象设为 null,当我尝试传递 Geometrixx 页面 URL 以获取其标题时,它会抛出“页面不存在:/content/geometrixx/fr.html”。

【问题讨论】:

  • 你传递的路径是/content/geometrixx/fr.html还是/content/geometrixx/fr
  • 1.正如 rakhi 提到的资源解析,不提供扩展名,只提供路径。 2、getContainingPage方法中的路径可以直接使用,有一个版本是String作为参数的。
  • 感谢 rakhi4110 和 Thomas ...根据您的建议,它确实有效。

标签: aem osgi-bundle sling


【解决方案1】:

删除扩展名(.html)并执行。它会正常工作。 对于超过 80000 个页面的迭代,请使用递归函数。

public String currentPageTitle(String pagePath) {
    Page page=null;
    ResourceResolver resourceResolver=null;
    PageManager pageManager=null;
    try {
        if (pagePath != null) {
            resourceResolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
            pageManager = resourceResolver.adaptTo(PageManager.class);
            page = pageManager.getContainingPage(resourceResolver.getResource(pagePath));
            LOGGER.error("Page $$$$"+page);
            if (page == null) {
                throw new IllegalArgumentException("Page does not exist: " + pagePath);
            }else{
                buildLinkAndChildren_loop(page);
            }
        }
    } catch (LoginException e) {
        LOGGER.error("Login Exception");
        e.printStackTrace();
    }
    return page.getTitle();
}
public void buildLinkAndChildren_loop(Page page) {
    if (page != null) {
        Iterator<Page> children = page.listChildren();
        while (children.hasNext()) {
            Page child = children.next();
            buildLinkAndChildren_loop(child);

        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多