如何使用Sightly遍历具有对象类型键的Map?

时间:2015-07-15 17:56:16

标签: cq5 aem sightly

本周刚开始在Sightly工作,所以我对此很陌生。但是,在使用它时,我需要以Map的形式将数据从后端传递到前端,其中包含Page类型的键和List类型的相应值,如下面的签名所示:

           public Map<Page, List<Page>> getComponentMap();

现在https://goo.gl/sylWTW上的文档指出可以通过以下方式遍历地图:

  <p data-sly-repeat="${myMap}">
         <span>key: ${item}</span>
         <span>value: ${myMap[item]}</span>
  </p>

但是,当我尝试它时,如果Keys是String Type,它就有效,但是如果我传递其他Object类型的键,就像我的情况下的'Page'类型那样。 我尝试了以下代码并用于显示密钥,但在添加第6行后抛出非法参数异常:

1    <div data-sly-use.jcomp="JavaComponent">
2        <ul data-sly-repeat.page="${jcomp.componentMap}">
3        <li>
4            <ul>
5                <li class="parent"><a href="${page.path}.html">${page.title} :</a></li>            
6                <li data-sly-repeat.subpage="${jcomp.componentMap[page]}"><a href="${subpage.path}.html">${subpage.title} </a></li>
7            </ul>
8        </li>
9        </ul>
10    </div>

列表适用于任何类型的对象,因此对于我对Page的Title,Path和Children的要求,我通过使用Map的Map来实现它,其中Map包含Page的所需信息的名称。

我不知道Map是否应该是这样或者我做错了什么,但是知道原因和/或类似的更好的解决办法会有很大的帮助例。

1 个答案:

答案 0 :(得分:0)

在第6行尝试:(不确定它是否有效):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="0dp"
    android:background="@drawable/background"
    tools:context=".MainActivity">

    <ImageButton
        android:id="@+id/bSwitchOnOff"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/off"
        android:padding="0dp"
        android:onClick="buttonClick"
        android:contentDescription="@string/onOffButton" />

</RelativeLayout>

类似的一个但使用LIST的例子,对我有用如下:

<li data-sly-repeat.subpage="${jcomp.componentMap[page]}">
<a href="${jcomp.componentMap[page].subpage.path}.html">${jcomp.componentMap[page].subpage.title} </a></li>` 

由于这变得越来越复杂,我们开始使用SlingModels。我有一个例子,如果你有兴趣: How to display values in a List of a SlingModel using Sightly