0

我正在尝试实现我自己版本的 WCM 导航组件,其逻辑可以在这里找到,而是替换我自己的逻辑:

import java.util.*;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageFilter;

import com.adobe.cq.sightly.WCMUsePojo;

public class Navigation extends WCMUsePojo{
    private Iterator<Page> items;

    @Override
    public void activate() throws Exception {
        Page navRootPage = getCurrentPage().getAbsoluteParent(2);
        items = navRootPage.listChildren(new PageFilter());
    }
    public Iterator<Page> getItems() {
        return items;
    }
}

在这里找到的 HTL是相同的。

我能够遍历导航项的第一级(深度 4)。但是循环item.html在这一行中断: <sly data-sly-test="${item.children.size > 0}" data-sly-call="${groupTemplate.group @ items = item.children}"></sly>

具体来说,item.children即使这些是隐式 Sling 对象,也似乎不起作用。关于为什么这会破坏的任何想法?

提前致谢!

4

1 回答 1

2

Navigation核心 WCM 组件中实现的模型返回一个通过方法NavigationItem公开其子级的列表。getChildren这允许您从 HTL/Sightly 中使用item.children. 由于您的 use-object 返回 WCMPage的列表,因此您需要使用该listChildren方法。您可以直接从 HTL/Sightly 使用item.listChildren.

通常,对于所有对象,您可以使用标准 JavaBeans 约定调用属性获取器,请参阅https://helpx.adobe.com/experience-manager/htl/using/use-api-java.html#Gettermmethods。有关 HTL/Sightly 中 AEM 上下文中可用的所有对象的列表,请参阅:https ://helpx.adobe.com/experience-manager/htl/using/global-objects.html

于 2018-12-14T12:57:30.063 回答