在CQ/AEM中禁用组件编辑

在CQ/AEM中禁用组件编辑,aem,sling,Aem,Sling,我有很多种情况,其中我有一个组件a,它使用cq:include来包含组件B。a和B都是可编辑的,并且都有对话框。但是,当A中包含B时,我想禁用组件B的直接编辑-我将通过A的对话框管理编写。我已经看到了一些实现这一点的方法。首先是 <% IncludeOptions.getOptions(request, true).forceSameContext(true); %> 第二个是 <% slingRequest.setAttribute(ComponentContext.B

我有很多种情况,其中我有一个组件a,它使用cq:include来包含组件B。a和B都是可编辑的,并且都有对话框。但是,当A中包含B时,我想禁用组件B的直接编辑-我将通过A的对话框管理编写。我已经看到了一些实现这一点的方法。首先是

<% IncludeOptions.getOptions(request, true).forceSameContext(true); %>

第二个是

<% slingRequest.setAttribute(ComponentContext.BYPASS_COMPONENT_HANDLING_ON_INCLUDE_ATTRIBUTE, true); %>
<% slingRequest.removeAttribute(ComponentContext.BYPASS_COMPONENT_HANDLING_ON_INCLUDE_ATTRIBUTE);  %>

我的理解是,第一种方法强制子组件进入父组件的编辑上下文,第二种方法根本不为子组件创建编辑上下文。但我不确定这种区别到底意味着什么。就我所知,唯一的主要区别是第一个只影响下一个组件include,而第二个影响两行之间的所有include。在生成的标记中还有一个细微的区别。但除此之外,对话似乎表现出同样的方式。可能我的POC太简单了,看不到差异……cq:EditConfig节点中是否有值会受到影响?还有别的区别吗


谢谢,您也可以关闭WCMMode包含的编辑模式:

<%WCMMode prevMode = WCMMode.DISABLED.toRequest(request);%>
    <cq:include path="b" resourceType="B" />
<%prevMode.toRequest(request);%>

这将呈现B,就像在发布服务器上呈现B一样,没有任何编辑功能