AEM默认值写入JCR

AEM默认值写入JCR,aem,jcr,Aem,Jcr,我注意到,当我为下拉列表设置defaultValue时,虽然在下拉列表中正确选择了它,但当我第一次将组件添加到页面时,它不会将defaultValue写入相应的JCR,直到我编辑并保存组件。即使我只是打开相应的对话框并单击OK,现在我的组件也能正常工作,因为这些值已经添加到JCR中 我确信我在这里遗漏了一个重要的部分,有人知道当组件第一次添加到页面时,如何将正确呈现组件所需的默认值添加到JCR中吗?我相信这就是它的工作方式。在加载/保存对话框之前,不会使用对话框中指定的默认值,因此在加载/保存对

我注意到,当我为下拉列表设置defaultValue时,虽然在下拉列表中正确选择了它,但当我第一次将组件添加到页面时,它不会将defaultValue写入相应的JCR,直到我编辑并保存组件。即使我只是打开相应的对话框并单击OK,现在我的组件也能正常工作,因为这些值已经添加到JCR中


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

我相信这就是它的工作方式。在加载/保存对话框之前,不会使用对话框中指定的默认值,因此在加载/保存对话框之前,正在编写的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节点下添加一个类似的节点


来源:

就像Sharath Madappa说的那样,如果组件名和jsp名相同,那么这就是它的工作方式。如果组件或页面下没有componentname.jsp,cq:template将无法工作。(参考:)

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