从CQ组件添加

时间:2013-05-05 10:22:12

标签: cq5 aem

在Adobe AEM(以前的CQ5)中,能够从组件中添加一些自定义html的最佳方法是什么?

我们假设我有一个页面,我可以在其中将我的组件放入任何一个解析器中。可用(因此可能有多个实例,我不知道确切的路径)。我希望这个组件根据它的内容(除了它的标准渲染之外)添加一些数据。问题是组件的代码是在JSP之后执行的,因此我无法通过例如传递数据进行渲染。请求属性。

2 个答案:

答案 0 :(得分:2)

随着盐的增加而采取所有这些措施,随后出现了一些猜测:

我不是百分之百确定这一点,但我总是假设组件脚本按照它们包含在页面中的顺序执行,这意味着在组件呈现脚本执行时,页面已经被渲染,使你所描述的不可能。

如果你真的需要这个,应该可以(至少在理论上)编写一些在head或headlibs.jsp中执行的代码,并构建一个页面中所有组件的列表(基本上只是递归地走jcr:页面的内容节点树,并构建您找到的资源类型的列表,然后基于它包括设置的客户端库类别,可能通过使它们成为组件的隐藏属性......或者其他东西。

答案 1 :(得分:0)

我们创建了“上游”组件或包含其他组件的包装器组件。

在上游的情况下,他们可以向请求对象添加属性(或使用cookie或...)

在“包装”案例(Composition Pattern)中,组件的其他组件。我们通过向内部组件将查找的请求属性添加String或Object将数据传递到包含的组件中。包含之后,包装器组件将删除它添加的属性(因此它不会意外地污染设置)。 然后,“内部组件”负责在请求对象上查找特定属性。

<%!
public String getPassedData(HttpServletRequest req, String attrName) {
    final Object passed = (req.getAttribute(attrName)==null) ? "" : req.getAttribute(attrName);
    if ( override.equals("") )
        return passed.toString();
    }
%>