我有各种各样的情况,我有一个组件A使用cq:include来包含组件B.A和B都是可编辑的并且有对话框。但是,当B包含在A中时,我想禁用组件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); %>
我的理解是,第一个强制子组件进入父级的编辑上下文,第二个只是根本不为子组件创建编辑上下文。但我不确定这些差异究竟意味着什么。据我所知,唯一的主要区别是第一个只影响下一个组件包括,而第二个影响两个线之间的所有包含。生成的标记也存在细微差别。但除此之外,对话框似乎表现得一样。我的POC可能太简单了,看不出差异...... cq:EditConfig节点中的值会受到影响吗?还有其他一些区别吗?
由于
答案 0 :(得分:1)
您还可以使用WCMMode打开包含编辑模式:
<%WCMMode prevMode = WCMMode.DISABLED.toRequest(request);%>
<cq:include path="b" resourceType="B" />
<%prevMode.toRequest(request);%>
这将呈现B,就像它将在没有任何编辑功能的发布服务器上呈现一样。