明显的隐式对象

时间:2018-12-14 01:28:10

标签: aem sling sightly htl

我正在尝试实现自己的WCM导航组件版本,该组件的logic can be found here替代了我自己的逻辑:

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 found here是相同的。

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

具体地说,item.children似乎不起作用,即使它们是隐式的Sling对象。有什么想法为什么会破坏?

谢谢!

1 个答案:

答案 0 :(得分:2)

在核心WCM组件中实现的Navigation模型返回NavigationItem的列表,该列表通过getChildren方法公开其子级。这样您就可以使用item.children从HTL / Sightly调用它。由于您的使用对象返回WCM Page的列表,因此您需要使用listChildren方法。您可以使用item.listChildren从HTL / Sightly直接调用它。

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