我在同一个jsp中有两个"cq:include"
具有相同的路径,我需要让它们都可编辑。但目前只有其中一个是可编辑的。
如果我更改了第二个显示的组件中的任何内容。但第二个本身不可编辑。我的要求是在保持包含路径相同的同时使两个组件都可编辑。
代码:
<cq:include path ="abc" resourceType="xyz"/>
<cq:include path ="abc" resourceType="xyz"/> # This one is not editable.
答案 0 :(得分:1)
具有相同资源类型的两个组件将在给定路径上仅创建单个节点。因此,您在其中一个组件中所做的任何更改都将反映在它们中,因为两个组件都将从同一节点读取。
这也是无法编辑第二个组件的原因。尝试为不同的组件提供不同的路径,如下所示。
<cq:include path="abc" resourceType="xyz" />
<cq:include path="abc_0" resourceType="xyz" />
答案 1 :(得分:0)
创作系统的工作方式是每个位置挂钩,所以如果你想在两个不同的地方创作,那么这两个不同的地方不应该在同一个页面上。这只是很好的可用性,因为它可能非常混乱。
INSTEAD,我建议页面上的第一个向slingRequest添加一个属性,注意它已被放置在页面上,并且具有相同路径的未来实例会在屏幕上显示一条消息,说明它是在别处编辑的。在不了解更多细节的情况下,很难为这种情况建议最佳可用性。
更新: 如果你必须这样做,这是一个解决方法 第1步:定义命名2个属性的约定。例如realTitle(String)和realTitleLastUpdated(日期/时间)。这些将是页面级属性,使用pageProperties可以轻松访问和检查它们。虽然您也可以通过子节点执行此操作,但这会变得更复杂。
步骤2:对于必须全部可模拟编辑的组件,允许他们创建自己的节点。然后,在EDIT环境中加载时,检查属性realTitle和realTitleLastUpdated中存储的lastUpdated时间
如果您对组件标题的最后修改,例如jcr:lastModified比realTitleLastUpdated更新,将title的本地值(例如jcr:title)更改为realTitle属性的值,并更新realTitleLastUpdated时间以反映组件中jcr:lastModified的时间。
如果相反,则realTitleLastUpdated比本地组件的最后一次修改时间更新,然后更新组件的jcr:title和要匹配的时间。
显然,如果上次更新时间匹配,则不执行任何操作。
这有点乱,但这会让一切都保持同步。
我意识到你可能没有意识到你可能需要保存状态。我相信你可以使用resource.getResourceResolver()。adaptTo(Session.class).save()
这样做(以及其他方式)我以前做过这件事,但已经有一段时间了。如果您有问题,请告诉我,我是在记忆中工作。
答案 2 :(得分:0)
好吧,如果你不想让作者为编辑这两个组件而烦恼,那么你应该使用其中一个组件的javascript / jquery和onChange()
,同时修改另一个组件的值。