【问题标题】:AEM property displays correctly in <p> but not in href attributeAEM 属性在 <p> 中正确显示,但在 href 属性中不正确显示
【发布时间】:2024-01-12 17:47:01
【问题描述】:

我正在使用此代码制作自定义多字段面包屑组件。

    <ul class="breadcrumb-list">
        <li class="breadcrumb-item" data-sly-repeat.textItem="${properties.text}">
            <a class="breadcrumb-link" href="${properties.link['textItemList.index']}">${textItem}</a>
            <p class="works">${properties.link[textItemList.index]}</p>
            <p class="doesn't work">${properties.link['textItemList.index']}</p>
            <span>//</span>
        </li>
    </ul>

我添加了段落元素以显示我的属性的显示方式。

这是 html 输出:

如果我删除 p class="works" 中的单引号,该值将显示面包屑项目的链接值。如果我在 p class="doesn't work" 中添加单引号,则不会显示任何内容。

您会认为从 href 中的相同值中删除引号会将我的链接显示为 href;但是,当我删除 href 值中的引号时,它会完全删除锚标记。当我重新添加它们时,我仍然可以看到锚标记,但是根本没有 href 属性,只有面包屑链接类。

如何获取 href 值以显示链接?

【问题讨论】:

  • 首先,使用单引号是行不通的,HTL 不会按照你的方式评估它。 ${properties.link[textItemList.index]} 是正确的。第二,请包含properties.link 的值,它是否存储为多值属性? properties.text 也是多值属性吗?

标签: href aem htl


【解决方案1】:

AEM 在呈现结果 html 之前评估 al href。

如果链接无效,它将不会在 href 下放置任何内容

如果表达式无效,它将清除所有部分

您是否使用有效链接进行了测试?

这不仅适用于纯文本。

【讨论】:

  • 是的,我用有效的链接尝试过它,并且表达式是正确的,因为它呈现在锚标记之外(p class="works" 证明了这一点)。我只是对为什么它不会呈现为 href 而是会呈现为段落感到困惑
【解决方案2】:

当我重新添加它们时,我仍然可以看到锚标记,但根本没有 href 属性,只有面包屑链接类。 - 这是预期的行为。因为你有一个链接数组,加上引号将尝试通过'textItemList.index' 键在数组中获取一个条目,就像你在地图中所做的那样,而不是通过索引。当然没有找到任何东西,所以渲染锚点时没有href 属性。

当我删除 href 值中的引号时,它会完全删除锚标记。 - 这不是预期的行为。既然您在段落中举例说明了它的工作原理,那么我想这是一个显示上下文问题。根据the documentation,HTL 应该隐式使用 uri 上下文作为 href 属性值和 text 用于 HTML 元素内的内容。

尝试明确提及 href="${properties.link[textItemList.index] @ context = 'uri'}"href="${properties.link[textItemList.index] @ context = 'text'}" 之类的上下文,或检查文档中提到的上下文 - unsafe 最终应该可以完成这项工作。

【讨论】:

    【解决方案3】:

    这个上下文对我不起作用,我面临同样的问题,如果我删除单引号“'”它会显示 href 就好了,但是由于我的 href 包含它,所以上面提到的上下文都没有做工作。

    有什么解决办法吗?

    【讨论】: