I am trying to implement my own version of WCM's navigation component, whose logic can be found here, subbing my own logic instead:
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;
}
}
The HTL, found here, is identical.
I am able to iterate over the first level (at depth 4) of the navigation items. But the loop breaks in item.html
at this line:
<sly data-sly-test="${item.children.size > 0}" data-sly-call="${groupTemplate.group @ items = item.children}"></sly>
Specifically, item.children
does not appear to work even though these are implicit Sling objects. Any thoughts on why this is breaking?
Thanks in advance!
The Navigation
model implemented in the Core WCM Components returns a list of NavigationItem
which expose their children via a getChildren
method. That allows you to call it from HTL/Sightly with item.children
. Since your use-object returns a list of WCM Page
s, you need to use the listChildren
method. You can call it directly from HTL/Sightly using item.listChildren
.
In general, for all objects, you can invoke a property getter using the standard JavaBeans conventions, see https://helpx.adobe.com/experience-manager/htl/using/use-api-java.html#Gettermethods. For a list of all objects available in AEM context in HTL/Sightly, see: https://helpx.adobe.com/experience-manager/htl/using/global-objects.html