【问题标题】:Pass data from one component to another in adobe CQ在 adobe CQ 中将数据从一个组件传递到另一个组件
【发布时间】:2014-01-24 06:17:26
【问题描述】:

我正在使用 Adob​​e CQ5。我制作了两个相互独立的组件。然而, 我想在另一个组件中使用来自一个组件的数据。 我如何实现这一目标?如何让两个组件相互交互?

提前致谢。

【问题讨论】:

  • 你能说得更具体点吗?你的意思是访问另一个组件的 jcr 节点?让它们通过 JavaScript 交互?

标签: aem day-cq


【解决方案1】:

有许多选项,具体取决于组件的耦合程度(例如,两者总是同时放置在页面上?它们是硬连接到模板中,还是由编辑器放置等。 )

如果两个组件在同一个页面上,最简单的可能是在一个组件中设置一个变量并在另一个组件中读取它,例如:

foo.jsp

<c:set var="globalFooTitle" value="${properties.title}" scope="request"/>

bar.jsp

<c:out value="${globalFooTitle}">[Optional fallback value]</c:out>

【讨论】:

  • 它并不总是有效 - 这取决于首先处理哪个组件
  • @zacheusz 是的,您无法读取尚未设置的属性 - 它仍在按顺序解析脚本。
  • 这是我见过的在运行时将参数从一个组件传递到另一个组件的最佳方法。但是,我宁愿在使用后立即添加&lt;c:set var="globalParam" value="${null}" /&gt;,以避免对可能共享相同方法的其他组件产生副作用。
  • @Micik,这是真的——希望这种方法更罕见,但如果您通常需要按照这些方法做一些事情,您可能还需要考虑名称间距的结构
【解决方案2】:

虽然@kmb 的回答没有任何问题,但我几乎总是更喜欢使用更高级别的 API 而不是更低级别的 API。对于 CQ,这意味着使用 sling 资源 API 而不是 JCR 节点 API。

假设单个页面上的 2 个组件的结构与他的布局相同。

Resource r = resourceResolver.getResource(currentResource, "../component2");
if(r != null) {
    ValueMap props = r.adaptTo(ValueMap.class);
    String somePropertyValue = props.get("someProperty", "");
}

【讨论】:

    【解决方案3】:

    您可以使用javax.jcr.Nodejavax.jcr.Property 接口来获取另一个组件的属性。例如,您已将 component1 和 component2 添加到 page1。在存储库中,您应该具有类似于以下的结构:

    /content
        /project
            /page1
                /jcr:content
                    /parsys
                        /component1
                            /...some properties
                        /component2
                            /...some properties
    

    如果你想在 component1 中获取 component2 的属性,你可以使用类似的东西:

    Node parsys = currentNode.getParent();
    if(parsys.hasNode("component2")) {
        Node component2 = parsys.getNode("component2");
        if(component2.hasProperty("someProperty"))
          Property someProperty = component2.getProperty("someProperty");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 2015-09-28
      • 2018-05-04
      • 2019-12-16
      • 2021-04-16
      • 2019-11-06
      相关资源
      最近更新 更多