【问题标题】:How to retrieve a node from a Page in CQ5?如何从 CQ5 中的页面中检索节点?
【发布时间】:2014-06-26 14:10:51
【问题描述】:

我有 2 个问题:

1) 通过使用页面名称,我进行了这样的 Xpath 查询:

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

而且我也能找到该页面(在 crxde Lite 中尝试过并找到正确的页面)。如何将 QueryResult 转换为 Page 类型?

2)将结果转换为Page类型后,如何获取jcr:content of this Page下的特定节点?

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

【问题讨论】:

    标签: xpath aem sling


    【解决方案1】:

    QueryResult 包装了Nodes 的集合。这两个类都是 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) 方法从页面jcr:content 中获取任何Resource,例如:

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

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

    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
    

    【讨论】:

    • 非常感谢托梅克!!!它真的有助于理解基本的东西..这应该工作:)
    【解决方案2】:

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

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

    【讨论】:

    • 感谢 parveen 的回复 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    相关资源
    最近更新 更多