我正在使用Adobe CQ5。我制作了两个彼此独立的组件。然而, 我想使用另一个组件中的数据。 我该如何实现这一目标?如何让两个组件相互交互?
提前致谢。
答案 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.Node
和javax.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");
}