You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AEM 6.2的Sightly中访问由Map组成的List

在Sightly中访问List元素的实现方案

嘿,我来帮你搞定在Sightly里访问List中Map元素的事儿!先提一句,你给的Java代码里有几个小笔误,我先帮你修正过来,这样后面的演示更准确:

// 修正后的Java数据初始化代码
List<Map<String, Object>> listOfMap = new ArrayList<>();

Map<String, Object> hmap1 = new HashMap<>();
hmap1.put("name", "Rob");
hmap1.put("class", "I");
listOfMap.add(hmap1); // 你原来的代码漏加这个元素到List里啦

Map<String, Object> hmap2 = new HashMap<>();
// 这里把subjects改成实际的Map而非字符串,后续访问更方便
Map<String, String> subjectsMap = new HashMap<>();
subjectsMap.put("subject1", "Maths");
subjectsMap.put("subject2", "English");
hmap2.put("subjects", subjectsMap);
listOfMap.add(hmap2);

接下来分两种场景讲Sightly里的实现:

1. 遍历整个List,逐个访问Map元素

首先要确保你的listOfMap已经作为模型属性传递到Sightly模板(比如在AEM中通过Model类暴露该属性)。之后用data-sly-list指令遍历List,再通过点语法访问Map中的键值:

<!-- Sightly模板代码 -->
<div class="list-container" data-sly-list.mapItem="${model.listOfMap}">
    <div class="map-item">
        <!-- 先判断属性是否存在,避免空值报错 -->
        <p data-sly-test="${mapItem.name}">姓名:${mapItem.name}</p>
        <p data-sly-test="${mapItem.class}">班级:${mapItem.class}</p>
        
        <!-- 访问嵌套的subjects Map -->
        <div data-sly-test="${mapItem.subjects}">
            <p>科目1:${mapItem.subjects.subject1}</p>
            <p>科目2:${mapItem.subjects.subject2}</p>
        </div>
    </div>
</div>

2. 直接访问List中指定索引的Map元素

如果不需要遍历,只想访问List中特定位置的Map元素,可以用索引语法直接定位,再结合点语法访问Map键值:

<!-- 访问List中第一个元素的name -->
<p>第一个元素的姓名:${model.listOfMap[0].name}</p>

<!-- 访问List中第二个元素的subjects -->
<p>第二个元素的科目1:${model.listOfMap[1].subjects.subject1}</p>

额外说明:如果subjects是JSON字符串的情况

如果你的subjects必须是JSON格式的字符串(比如"{subject1:Maths, subject2:English}"),想要解析成Map访问的话,需要在Java端先把字符串解析为Map对象,或者使用Sightly的扩展函数(比如AEM中的json函数)来解析:

<!-- 使用AEM的json函数解析字符串为Map -->
<div data-sly-test="subjectsObj = ${mapItem.subjects @ json=true}">
    <p>科目1:${subjectsObj.subject1}</p>
</div>

内容的提问来源于stack exchange,提问作者mchinta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:31:32