You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按名称查找JCR父节点?Groovy控制台组件标题替换需求

按节点名称向上查找父节点(AEM Groovy脚本实现)

针对页面结构不固定的场景,无法通过固定层级的getParent()链式调用获取目标父节点,可以写一个通用方法,循环向上遍历节点树,按名称匹配目标父节点。

实现步骤

  1. 定义工具方法,循环查找指定名称的祖先节点
def findAncestorNodeByName(Node currentNode, String targetNodeName) {
    Node parent = currentNode.getParent()
    while (parent != null) {
        if (targetNodeName.equals(parent.getName())) {
            return parent
        }
        parent = parent.getParent()
    }
    return null // 未找到目标节点时返回null,可根据业务添加异常处理
}
  1. 修改原有脚本,集成该方法完成标题替换
def query = SQLQuery() <- 你的特定资源类型组件查询语句
def result = query.execute()
result.nodes.each{ node -> 
    // 查找当前组件所在页面的jcr:content节点
    Node jcrContentNode = findAncestorNodeByName(node, "jcr:content")
    
    if (jcrContentNode != null) {
        Node pageNode = jcrContentNode.getParent()
        // 检查页面节点是否存在jcr:title属性
        if (pageNode.hasProperty(JcrConstants.JCR_TITLE)) {
            String pageTitle = pageNode.getProperty(JcrConstants.JCR_TITLE).getString()
            // 替换组件的jcr:title为页面标题
            node.setProperty(JcrConstants.JCR_TITLE, pageTitle)
        }
    }
}
// 提交会话保存修改
node.getSession().save()

关键说明

  • 该方法不依赖固定层级,无论组件在页面结构的哪个深度,都能找到最近的jcr:content祖先节点
  • 增加空值判断避免空指针异常,比如页面节点不存在jcr:title属性、未找到jcr:content节点的情况
  • 必须调用save()方法提交JCR会话,否则修改不会持久化到仓库

内容的提问来源于stack exchange,提问作者alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:15:39