在adobe CQ中将数据从一个组件传递到另一个组件

时间:2014-01-24 06:17:26

标签: cq5 aem day-cq

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

提前致谢。

3 个答案:

答案 0 :(得分:3)

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

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

<强> foo.jsp

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

<强> bar.jsp

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

答案 1 :(得分:2)

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

这看起来像这样,假设在他布局的单个页面上有两个组件的相同结构。

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

答案 2 :(得分:0)

您可以使用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");
}