写入 JCR 的 AEM 默认值

AEM DefaultValue written to JCR

我注意到,当我为下拉菜单设置默认值时,虽然在我第一次将我的组件添加到页面时在下拉列表中正确选择了它,但在我编辑组件之前,它不会将默认值写入相应的 JCR并保存。即使我只是打开相应的对话框并单击“确定”,现在我的组件也能按预期工作,因为值已添加到 JCR。

我确定这里遗漏了一个重要的部分,有谁知道如何在第一次将组件添加到页面时将组件正确呈现所需的默认值添加到 JCR 中?

我相信这就是它的工作方式。在对话 loaded/saved 之前,不会使用对话中指定的默认值,因此在此之前,正在创作的 JCR 存储库上的节点不会具有默认值。

我们通过添加绑定到组件(标签)的后端代码在一个项目中解决了这个问题,这样当加载组件时,如果 属性 不存在,它将是第一次用默认写的。例如:

if (wcmMode == WCMMode.EDIT )
{
   if(!currentNode.hasProperty("SomePropertyThatWillAlwaysExistIfTheDialogHasBeenSaved")) {
         currentNode.setProperty("PropertyThatShouldHaveDefault", GlobalConstants.TRUE);
         currentNode.getSession().save();
   }
}

正如 Shwan 所说,这就是它的工作方式。默认值或空文本仅适用于对话框。在创作对话框之前,它们不会持久存在。属性必须通过不同的方法设置。 CQ 已附带此功能,您无需任何自定义代码即可实现。

在您的组件下,创建一个名为 cq:template[nt:unstructured] 的节点。如果所有数据都存储在组件节点本身上,请将默认值作为属性添加到名称与对话框中的名称相同的 cq:template 节点。如果数据存储在子节点中,请在 cq:template 节点下添加一个类似的节点。

来源:http://blogs.adobe.com/experiencedelivers/experience-management/defaults-in-your-component/

就像 Sharath Madappa 所说的那样,如果组件名称和 jsp 名称相同,这就是它工作正常的方式。如果组件或页面下没有componentname.jsp,cq:template将不起作用。(参考:http://labs.6dglobal.com/blog/2014-07-08/using-the-cq-template/

如果您的组件下有 componentname.html,请将节点 [cq:template] 类型更改为 [cq:Template] 而不是 [nt:unstructured]。在这种情况下,defaultValues 可以在首次添加到页面时添加到 JCR。