2015-06-03 67 views
3

我注意到,当我为下拉列表设置了我的defaultValue时,虽然它在下拉菜单中正确选择,但当我第一次将我的组件添加到页面时,它并未将defaultValue写入相应的JCR,直到我编辑组件并保存。即使我只是打开相应的对话框,然后单击确定,但我的组件按预期工作,因为这些值已添加到JCR。AEM DefaultValue写入JCR

我确定有一件重要的作品我在这里失踪了,有没有人知道如何将组件正确呈现所需的defaultValue在第一次添加到页面时添加到JCR中?

回答

6

赞Shwan说这就是它的工作方式。默认值或空文本仅用于对话框。在创建对话框之前,它们不会被保留。属性必须通过不同的方法设置。 CQ已经提供了这个功能,你可以不用任何自定义代码。

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

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

4

我相信这只是它的工作方式。在对话框被加载/保存之前,对话框中指定的默认值不会被使用,所以直到出现这种情况时,正在创建的JCR存储库上的节点将不具有默认值。

我们通过添加与组件​​绑定的后端代码(一个标签)来解决此问题,以便在组件加载时,如果该属性不存在,则会使用默认值第一次。例如:

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

像沙拉斯Madappa说的就是它工作正常,如果组件的名称和JSP名称相同的方式。 (参考:http://labs.6dglobal.com/blog/2014-07-08/using-the-cq-template/

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