如何从内容页面检索第一个PAR节点

时间:2013-03-14 15:38:14

标签: java iteration cq5

我正在遍历所有子页面以显示其标题和链接。但我还需要显示第一个段落节点(如果存在)。

例如,哇我会从以下内容页面中检索第一个PAR节点吗?

/content
  /foo
     /jcr:content
        /title
        /par <- need this one
        /par
        /image

我认为Page class getProperties().get()方法可行,但我只看到在jcr:content中返回属性的示例,而不是它下面的任何子节点。

    ArrayList aChildren = new ArrayList();
    String listroot = properties.get("listRoot", currentPage.getPath());

    Page rootPage = pageManager.getPage(listroot);
    if (rootPage != null) {
        Iterator<Page> children = rootPage.listChildren(new PageFilter(request));

        while (children.hasNext()) {
            Page child = children.next();

            out.println( child.getTitle() + "<br>" );
            //Output first PAR tag of this page here
        }

    }

可以使用或其他特定于CQ的标记来完成,还是这是java函数的工作?

4 个答案:

答案 0 :(得分:8)

您必须遍历子页面的子节点。

获取具有资源类型parsys的第一个节点。拥有该节点后,您可以获取其路径并将其包含在当前页面中。

Resource childResource = resourceResolver.getResource(child.getPath());
Node childNode = childResource.adaptTo(Node.class);
Node jcrContent = childNode.getNode("jcr:content");
NodeIterator childrenNodes = jcrContent.getNodes();

while(childrenNodes.hasNext()){
    Node next = childrenNodes.nextNode();
    String resourceType = next.getProperty("sling:resourceType").getString();
    if(resourceType.equals("foundation/components/parsys")){
        %><cq:include path="<%= next.getPath() %>" resourceType="foundation/components/parsys" /><%
        break;
    }
}

这将在当前页面上嵌入子页面上的第一个parsys组件。我没有对此进行测试,因此可能需要进行一些修改才能使其正常工作。

答案 1 :(得分:2)

你也可以试试这个:

<%@page session="false" import="com.day.cq.wcm.foundation.Paragraph,
                                com.day.cq.wcm.foundation.ParagraphSystem"%>
<%
ParagraphSystem parSys = ParagraphSystem.create(resource, slingRequest);
for (Paragraph par: parSys.paragraphs()){

通过这种方式,您可以遍历当前资源下的parsys节点。

答案 2 :(得分:1)

CQ5存储库中的每个节点都可以表示为Resource。您可以使用以下代码获取资源

//resolver being instance of org.apache.sling.api.resource.ResourceResolver
Resource paraResource = resolver.getResource("path of the paragraph");

然后你可以操纵资源

答案 3 :(得分:1)

如果您尝试将解析从一个页面引用到另一个页面,我会使用开箱即用的reference component。此组件接受站点上任何位置的组件路径,并将其显示在您选择的页面上。