如何在Sightly中使用Java的HashMap类获取键/值对

8

我有一个基本的Java使用类对象,它扩展了WCMUSE和一个简单的哈希映射方法。在Sightly代码中,我有如下内容:

${item}

${item.key}

${item.value}

但是这样不起作用——我该如何在Sightly代码中返回键/值对呢?

2个回答

13

Sightly Intro Part 3中有一个示例,${item} 和 ${itemList} 的使用作为变量在AEM Docs Sightly Page上有记录。该页面还提供了以下访问动态值的示例:

<dl data-sly-list.child="${myObj}">
<dt>key: ${child}</dt>
<dd>value: ${myObj[child]}</dd>
</dl>

这里是一个简单HashMap的示例。

使用Sightly的HTML:

<div data-sly-use.myClass="com.test.WcmUseSample" data-sly-unwrap>
    <ul data-sly-list.keyName="${myClass.getMyHashMap}">
        <li>KEY: ${keyName}, VALUE: ${myClass.getMyHashMap[keyName]}</li>
    </ul>
</div>

Java:

->

Java:

package com.test;

import java.util.HashMap;
import java.util.Map;
import com.adobe.cq.sightly.WCMUse;

public class WcmUseSample extends WCMUse {
private Map<String, String> myHashMap;

    public void activate() throws Exception {
        myHashMap = new HashMap<String, String>();
        for (int i = 0; i < 10; ++i) { 
            myHashMap.put(""+i, "Hello "+i);
        }
    }
    public Map<String,String> getMyHashMap() {
        return myHashMap;
    }
}

1
不必要使用带有 data-sly-use.myClass 的周围 div。应尽可能避免这样做,以创建使用 data-sly-unwrap 删除的元素,以使模板标记尽可能接近生成的标记。因此,data-sly-use.myClass 应放置在 UL 元素上。 - Gabriel Walt
1
@JohnKepler 这只适用于没有字符串键的HashMap吗?(例如,Map<Tag,List <Tag >>会触发“SlingException:无效属性名称”) - NielsInc

0
您也可以尝试以下方法(AEM 6.4):
请注意使用data-sly-test.hashMap进行空值检查。
<div data-sly-use.pageController="com.corp.wcms.core.pages.anypage.PageController"

  <div data-sly-test.hashMap="${pageController.myHashMap}" data-sly-unwrap>
     <ul data-sly-list.keyName="${hashMap}">
       <li>KEY: ${keyName}, VALUE: ${hashMap[keyName]}</li>
     </ul>
  </div>

</div>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接