如何动态映射节点属性以用于AEM默认列表组件?

时间:2014-12-16 19:38:15

标签: adobe cq5 aem jcr

我试图将自定义组件移植到AEM 5.6.1中的开箱即用List组件。自定义组件将其设置保留在节点属性中,这些属性的名称与 com.day.cq.wcm.foundation.List 期望的名称不同。

例如:自定义组件实现了标签过滤器,其值存储在名为" featuresTags"的属性中,OOTB列表组件正在寻找名为"标签" (JavaDoc)。

有没有办法在不更新存储库的情况下动态填充或映射这些属性?


实施细节:

  • 我覆盖了 / lib / foundation / components / list 组件 / apps / foundation / components / list 主要是一个容器 sling:resourceSuperType 设置为 / libs / foundation / components / list , 添加了两个自定义视图

  • 我还有另一个组件 / apps /< myapp> / components / publicationList 有哪些 sling:resourceSuperType 有效地设置为基础/组件/列表 扩展 / apps / foundation / components / list 组件

  • publicationList 目录下的
  • 我有init.jsp,我把自定义逻辑列表放在 初始化。

这就是问题所在。自 / apps /< myapp> / components / publicationList 之前已经存在并完全独立于OOTB列表组件,它在不同内容中使用的该组件的多个实例中分配了自己的配置参数。它之前没有使用 com.day.cq.wcm.foundation.List ,并使用 Xpath 查询从repo中提取数据。

我想做的是为旧组件利用OOTB功能(暗示 com.day.cq.wcm.foundation.List 利用率)。问题是我如何能够模仿"使用另一个属性的值而不实际更改存储库的节点的某些属性? com.day.cq.wcm.foundation.List SlingHttpServletRequest 用于初始化,因此无论我对Node做什么(从当前资源改编)都没有在使用的范围内显示用于列表初始化。我不想在运行时实际写入存储库(出于性能和安全性原因),并希望避免回购信息的后台更新 - 系统是实时的,多个作者正在使用旧组件。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

现在我理解了这个要求,我试着给出答案。我认为唯一可行的方法是编写一个“迁移”脚本,将旧版属性更改为兼容的属性名称和/或格式。您可以在具有几行代码的JSP中执行此操作。只需使用遗留列表resourceType查询所有组件,并更改所有组件的属性。