从CQ5中的当前页面获取节点

时间:2013-12-16 04:23:29

标签: cq5 jcr aem

我有一个组件需要从同一页面上的另一个组件获取属性。

有没有办法从NODE获取组件的currentPage对象?

我有一个我需要在代码中获取的节点的名称。

3 个答案:

答案 0 :(得分:9)

假设您需要的节点位于Page/jcr:content/yournode

Page对象有一个方法getContentResource(),默认情况下会返回jcr:content资源节点。您还可以使用page.getContentResource("yournode")获取jcr:content以下的特定节点。

如果您的节点出于某种原因与jcr:content(它不应该是btw)兄弟姐妹,您可以使用resource.listChildren()迭代资源的子节点。

请记住,这是所有Sling API,因此您管理的是资源,而不是节点。您可以使用resource.adaptTo(Node.class)

从资源获取JCR节点

答案 1 :(得分:1)

通常每个Page类都有一个方法可以检索jcr:content中更清晰的节点:

Node node = CurrentPage.getContentResource("COMPONENTNAME").adaptTo(Node.class);

开发人员应在将资源调整到节点之前检查资源是否存在。

现在我们有了一个节点,我们可以从该节点中提取属性。

String title = node.getProperty("jcr:title").getString();

这样您就可以获取组件的任何属性。

答案 2 :(得分:0)

我想补充一点,通过将请求委托给servlet可以更清晰地解决这个问题,前提是解决问题需要分离关注点 - 将视图与控制器逻辑分开。 LINK EXPLAINING IN DETAIL HOW VALIDATION IS DONE USING SLING SERVLETS

使用下面调用托管servlet托管的逻辑

将验证器添加到表单
  var url = CQ.HTTP.addParameter(dialog.path + '.validator.json', 'value', value);
  var result = CQ.HTTP.eval(url);

 and in the servlet we access the node and its parents using below logic
   final Node currentNode = request.getResource().adaptTo(Node.class);
   try {
        final Node par = currentNode.getParent();

        final NodeIterator nodes = par.getNodes();

        // get all form names for the current paragraph system
        while (nodes.hasNext()) { //and the business logic