aem - 在 Adob​​e CQ (AEM) 中如何使用 `data-sly-list` 和 `data-sly-resource` 迭代资源列表?

标签 aem sightly

在 AEM 6.1 中,结构如下:

 - Page
   - form node
     - parsys
       - node 1
       - node 2
       - ...
       - node n

原始表格有以下有效的代码 <div data-sly-resource="${ 'parsys' @ resourceType='foundation/components/parsys' }" data-sly-unwrap>

我正在尝试更新在最后一个 node n 之前注入(inject)内容的表单组件.在表单节点上,我有以下代码:

<div data-sly-list.children="${resource.listChildren}">
    <div data-sly-list.fields="${children.listChildren}">
        <div data-sly-test=${fieldsList.last}> DO SOMETHING BEFORE LAST NODE</div>
        <div data-sly-resource="${fields}"></div>
    </div>
</div>

data-sly-resource似乎导致服务器挂起,在浏览器等待响应时 cpu 使用率非常高。我必须终止服务器进程并重新启动它。

我试过了<div data-sly-resource="${fields @ resourceType = fields.resourceType}"></div>但它似乎没有按预期呈现字段。

这是遍历节点的正确方法吗?


更新:查看了大量的 error.log 文件,似乎 CPU 峰值是由 RecursionTooDeepException 的无限循环引起的 - 我看不到递归在哪里。

最佳答案

根据Sightly documentation on the Resource block statement ,您需要传入资源的路径,可以是相对路径,也可以是绝对路径。我可以通过更改 <div data-sly-resource="${fields}"></div> 使您的代码正常工作至 <div data-sly-resource="${fields.path}"></div> .

<div data-sly-list.children="${resource.listChildren}">
    <div data-sly-list.fields="${children.listChildren}">
        <div data-sly-test=${fieldsList.last}> DO SOMETHING BEFORE LAST NODE</div>
        <div data-sly-resource="${fields.path}"></div>
    </div>
</div>

如果您还没有下载 Sightly REPL ,我强烈建议使用它来测试和调试此类场景。

关于aem - 在 Adob​​e CQ (AEM) 中如何使用 `data-sly-list` 和 `data-sly-resource` 迭代资源列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35876744/

相关文章:

java - CQ5 OSGi Bundle 错误 - org.json.simple -- 无法解决

javascript - AEM 6.2 从父页面获取组件属性

adobe - 自定义 CQ/AEM 身份验证

aem - 从 Sightly (AEM6) 在 parsys 上设置空文本

javascript - 暂停按钮功能在轮播中不起作用

java - 如果我在 cq5 Web 应用程序中有多个调度程序,谁充当负载均衡器?

aem - 如何以编程方式创建新版本的 CQ5 页面?

aem - 根据RTF小部件的输入以HTML呈现电话链接

aem - 当 data-sly-test 计算结果为 false 时保留子元素?