【问题标题】:AEM DefaultValue written to JCRAEM DefaultValue 写入 JCR
【发布时间】:2015-06-03 21:48:20
【问题描述】:

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

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

【问题讨论】:

    标签: aem jcr


    【解决方案1】:

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

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

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

    【讨论】:

    • 陷入同样的​​情况,但我无法将子节点添加到 cq:template,因为我的子节点是我的幻灯片。它们可以是 10,20 或 100,我无法在父母 cq:template 中硬编码那么多幻灯片
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      就像 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]。在这种情况下,默认值可以在首次添加到页面时添加到 JCR。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多