如何从CQ5中的页面检索节点?

时间:2014-06-26 14:10:52

标签: xpath cq5 sling aem

我有两个问题:

1)通过使用Page name我做了Xpath Query,如下所示:

//element(*, cq:Page)
[
fn:name() = 'hello-world ' 
]

我也可以找到该页面(在crxde Lite中尝试并找到了正确的页面)。如何将QueryResult转换为页面类型?

2)将结果转换为Page类型后,如何检索jcr下的特定节点:此页面的内容?

我是CQ5的新手,所以我对现有的API没有很好的了解。任何帮助或指针都非常感谢。

2 个答案:

答案 0 :(得分:2)

QueryResult包含Node的集合。这两个类都是JCR API的一部分。另一方面,Page是CQ API的一部分。即使两个对象代表相同的物理事物,也没有直接的方法将Node转换为Page。您唯一能做的就是走Node路径并使用此路径检索Page

PageManager pageManager = resourceResolver.adaptTo(PageManager.class);
QueryResult result = ...;

NodeIterator nodes = result.getNodes();
while (nodes.hasNext()) {
    Node node = nodes.nextNode();
    Page page = pageManager.getPage(node.getPath());
    // do anything you want with the Page
}

关于第二个问题 - 您可以使用Page#getContentResource(String)方法从页面Resource中抓取任何jcr:content,例如:

Resource resource = page.getContentResource("parsys/text");

Resource是Sling API的一部分。您可以使用Node方法将其转换为adaptTo()

Node node = resource.adaptTo(Node.class);

但是,学习如何使用Sling API是一个好主意。对于初学者,您可以通过将资源调整为ValueMap类来读取资源/节点属性:

ValueMap map = resource.adaptTo(ValueMap.class);
map.get("myProperty", ""); // the second argument is the default value

答案 1 :(得分:-2)

如果您询问JSP代码,请包含文件global.jsp并通过属性(隐式对象)访问它:

String title = properties.get("title", ""); // title = node name